let elem = null;
let value = elem.value;
console.log(value);
// Uncaught ReferenceError: value is not defined
위와 같이 에러가 뜬다.
let elem = null;
let value = elem?.value;
console.log(value); // null
null이 그대로 반환된다.
-> 객체가 null 혹은 undefined라면, null과 undefined로 반환하고, 그렇지 않으면 우항을 반환한다.
옵셔널 체이닝은 객체가 null 혹은 undefined값을 확인하는 용도라고 할 수 있다.
null 병합 연산자는 '??'로 표현한다.
let foo = null ?? 'default value';
console.log(foo); // 'default value'
null 병합 연산자는 옵셔널 체이닝과는 다르게 null 혹은 undefined인 객체라면, 우항을 반환한다.
하지만 이것도 문제가 있는데, 모든 Falsy 값(false, null, undefined, 0, -0, NaN, '')일 때, 우항을 반환하는 게 아니다.
let foo = '' ?? 'default value';
console.log(foo); // ''
위 예시 코드와 같이 객체가 빈 문자열 '' 이라면, 그대로 빈 문자열 ''이 반환되는 걸 알 수 있다.
다른 Falsy 값도 null과 undefined가 아니라면, 그 값 그대로 반환한다.
그래서 예기치 못한 상황이 나올 수 있다는 걸 명심해야 한다. 전에 업로드한 비교 연산자 글에서도 썼듯이, 예기치 못한 상황이 발생하지 않도록 방지하는 것이 좋기 때문에, 웬만하면 null 병합 연산자는 쓰지 않는 편이 좋다고 생각한다.
옵셔널 체이닝 개념과 null 병합 연산자 개념을 알게 된거 같아 좋네요. ㅎㅎㅎ