|| 연산자: 결과 값이 true이면 첫번째 truthy value를 반환하고, 결과 값이 false이면 두번째 falsy value를 반환한다..
|| 연산자의 경우 하나만 truthy value이면 어차피 결과가 true이기 때문에 나머지를 확인 하지 않는다는 점에서 short-circuiting이라고 부른다.
&& 연산자: 결과 값이 false이면 첫번째 falsy value를 반환하고, 결과 값이 true이면 두번째 truty value를 반환한다.
// ||: 디폴트 값을 세팅하기 위해 사용하기도 한다.
const guests1 = restaurant.numGuests ? restaurant.numGuests : 10;
console.log(guests1);
const guests2 = restaurant.numGuests || 10;
console.log(guests2);
// &&: 조건에 따라 코드를 실행하기 위해 사용하기도 한다.
if (restaurant.orderPizza) {
restaurant.orderPizza('mushrooms', 'spinach');
}
restaurant.orderPizza && restaurant.orderPizza('mushrooms', 'spinach');
const menu = [...restaurant.starterMenu, ...restaurant.mainMenu];
for (const item of menu) console.log(item);
for (const [i, el] of menu.entries()) {
console.log(`${i + 1}: ${el}`);
}
console.log([...menu.entries()]);
단순히 배열의 아이템들을 가지고 반복문을 실행하고 싶다면 for-of 반복문을 사용하면 좋다.
프로퍼티명에 [](bracket notation)을 사용하면 객체를 선언할 때 반드시 문자열을 쓰지 않아도 된다.
변수, 템플릿 리터럴 등 원하는 표현을 담을 수 있다.
옵셔널 체이닝 ?.(Optional Chaining)
// console.log(restaurant.openingHours.mon.open); // Uncaught TypeError: Cannot read properties of undefined (reading 'open')
if (restaurant.openingHours && restaurant.openingHours.mon)
console.log(restaurant.openingHours.mon.open);
// WITH optional chaining
console.log(restaurant.openingHours.mon?.open); // undefined
console.log(restaurant.openingHours?.mon?.open); // undefined
// Example
const days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'];
for (const day of days) {
const open = restaurant.openingHours[day]?.open ?? 'closed';
console.log(`On ${day}, we open at ${open}`);
객체에 원하는 데이터가 있을 때만 사용하도록 조건을 달다보면 코드가 지저분해질 수 밖에 없다. 그럴 때 사용하도록 옵셔널 체이닝이 등장했다.
객체에 .로 체이닝을 할 때 ?을 같이 사용해주면 없을 경우 TypeError가 나는 것이 아닌 undefined로 출력된다.
// Methods
console.log(restaurant.order?.(0, 1) ?? 'Method does not exist');
console.log(restaurant.orderRisotto?.(0, 1) ?? 'Method does not exist');
// Property NAMES
const properties = Object.keys(openingHours);
console.log(properties);
let openStr = `We are open on ${properties.length} days: `;
for (const day of properties) {
openStr += `${day}, `;
}
console.log(openStr);
// Property VALUES
const values = Object.values(openingHours);
console.log(values);
객체는 이터러블이 아니지만 반복문에 사용하려면 Object.keys 와 Object.values를 활용할 수 있다.
// Entire object
const entries = Object.entries(openingHours);
// console.log(entries);
// [key, value]
for (const [day, { open, close }] of entries) {
console.log(`On ${day} we open at ${open} and close at ${close}`);
}