1. Optional Chaining 01 ★
{
const person1 = {
name: 'Ellie',
job: {
title: 'S/W Engineer',
manager: {
name: 'Bob',
},
},
};
const person2 = {
name: 'Bob',
};
// 이전
{
function printManager(person) {
console.log(person.job && person.job.manager && person.job.manager.name);
}
printManager(person1); // Bob
printManager(person2); // undefined
}
// 이후
{
function printManager(person) {
console.log(person.job?.manager?.name);
}
printManager(person1); // Bob
printManager(person2); // undefined
}
}
// --> person1 같은 경우 job 객체안에 manager 객체안에 name이 존재하지만
// --> person2 는 name 만 존재한다.
// ('' == false)
2. Optional Chaining 02 ★
let num1 = undefined;
let num2 = 10;
let num3 = function number() { console.log(20); };
// true : '문자열', -1, 'false' ...
// false : -0, 0, '', null, undefined, false, NaN
num1 && console.log(num1); // num1이 true이면 console.log를 실행 -> 실행 X
num2 && console.log(num2); // num2가 true이면 console.log를 실행 -> 실행 O
num3 && concole.log(num3); // num3가 true이면 console.log를 실행 -> 실행 O
3. Nullish Coalescing Operator ★
{
// Logical OR operator
// false: false, '', 0, null, undefined
// 이전
{
const name = 'Ellie';
const userName = name || 'Guest';
console.log(userName);
// -> userName 은 name이 false 이면 'Guest' 를 할당하고,
// false 가 아니면 'Ellie' 를 할당한다.
}
{
const name = '';
const userName = name || 'Guest';
console.log(userName);
// -> '' 인 경우도 false 를 반환하기 때문에 'Guest'를 할당하게 된다.
}
{
const name = 0;
const userName = name || 'Guest';
console.log(userName);
// -> 0 인 경우도 false 를 반환하기 때문에 'Guest'를 할당하게 된다.
}
// ※ 사용자가 아무런 값도 입력하고 싶지 않을때 => ''
// ※ 사용자가 0 을 입력하고 싶을 때 => 0
// 이런 경우에도 무조건 'Guest' 를 반환해 버리기 때문에 문제가 발생한다.
// 이후
{
const name = '';
const userName = name ?? 'Guest';
console.log(userName);
// -> '' 인 경우도 false 를 반환하지 않고 name이 null 이거나 undefined 인 경우에만
// false 를 반환하여 'Guest' 를 할당하게 된다.
}
{
const name = 0;
const userName = name ?? 'Guest';
console.log(userName);
// -> 0 인 경우도 false 를 반환하지 않고 name이 null 이거나 undefined 인 경우에만
// false 를 반환하여 'Guest' 를 할당하게 된다.
}
}
// ES12
name ??= 'Guest'; // name = name ?? 'Guest'