nullish coalescing operator(??)는 ECMAScript 2020에 업데이트 된 것으로 기존의 or operator(||)에 null과 false를 구분해서 처리하는 기능이 포함된 operator이다.
or operator 는 첫번째 truthy한 value를 반환하고, 모든값이 falsey하다면 마지막 operand(피연산자)를 반환한다.
예를 들어,
let a = false || true;
console.log(a); //true를 반환
let b = false || null;
console.log(b); //null을 반환
let c = null || false;
console.log(c); //false를 반환
위와 같은 결과를 얻을 수 있다.
만약에 위와 같은 상황에서 nullish coalescing operator를 사용한다면
let a = false ?? true;
console.log(a); //false를 반환
let b = false ?? null;
console.log(b); //false를 반환
let c = null ?? false;
console.log(c); //false를 반환
let d = null ?? true;
console.log(d); //true를 반환
위와 같은 결과를 얻을 수 있다.
이유는 nullish coalescing operator는 첫번째 nullish 하지 않은 value를 반환하기 때문이다. 그리고 마찬가지로 모든값이 nullish하다면 마지막 operand(피연산자)를 반환한다.
다음은 falsey 한 값들을 정리한 표이다.
| value | description |
|---|---|
false | 키워드 false |
0 | 숫자 zero |
-0 | 음수 zero |
0n | BigInt. 불리언으로 사용될 경우, 숫자와 같은 규칙을 따름. |
"" | 빈 string |
null | null - 아무런 값도 없음 |
undefined | undefined - 원시값 |
NaN | NaN - 숫자가 아님 |
이 중에서 null과 undefined만 nullish한 값이다.
위 표를 참고해서 or operator(||)와 nullish coalescing operator(??)의 결과를 추측할 수 있다.