a ?? b
의 결과는 다음과 같다.
nullish 병합 연산자 ??
없이 x = a ?? b
와 동일한 동작을 하는 코드를 작성하는 아래와 같다.
x = (a!==null && a !==undefined) ? a : b ;
nullish 병합 연산자 ??를 사용하면 피연산자 중 값이 할당된 변수를 빠르게 찾을 수 있다.
// height가 null이나 undefined인 경우, 100을 할당
name = name ?? "타잔";
||
는 첫번째 truthy값을 반환
??
는 첫번째 정의된(defined) 값을 반환
??
와 ||
을 비교해 보면 아래와 같다.
let width = 0
console.log(name || 100) // 100
console.log(name ?? 100) // 0
height || 100
은 height에 0을 할당했지만 0을 falsy 한 값으로 취급했기 때문에 null이나 undefined를 할당한 것과 동일하게 처리한다.
반면 height ?? 100
의 평가 결과는 height가 정확하게 null이나 undefined일 경우에만 100이 된다.
이런 특징 때문에 높이처럼 0이 할당될 수 있는 변수를 사용해 기능을 개발할 땐 ||보다 ??가 적합하다.