반응형
nullish 병합 연산자(nullish coalescing operator) ??: 짧은 문법으로 여러 피연산자 중 값이 ‘확정되어 있는’ 변수를 찾을 수 있습니다.
a ?? b의 평가 결과는 다음과 같습니다.
- a가 null도 아니고 undefined도 아니면: a
- 그 외의 경우: b
- x = (a !== null && a !== undefined) ? a : b;
let firstName = null;
let lastName = null;
let nickName = "바이올렛";
// null이나 undefined가 아닌 첫 번째 피연산자
alert(firstName ?? lastName ?? nickName ?? "익명의 사용자"); // 바이올렛
'??'와 '||'의 차이
- ||는 첫 번째 truthy 값을 반환합니다.
- ??는 첫 번째 정의된(defined) 값을 반환합니다.
- height = height ?? 100; //height에 값이 정의되지 않은경우 height엔 100이 할당됩니다.
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
height || 100은 height에 0을 할당했지만 0을 falsy 한 값으로 취급했기 때문에 null이나 undefined를 할당한 것과 동일하게 처리합니다. 따라서 height || 100의 평가 결과는 100입니다.
반면 height ?? 100의 평가 결과는 height가 정확하게 null이나 undefined일 경우에만 100이 됩니다. 예시에선 height에 0이라는 값을 할당했기 때문에 얼럿창엔 0이 출력됩니다.
이런 특징 때문에 높이처럼 0이 할당될 수 있는 변수를 사용해 기능을 개발할 땐 ||보다 ??가 적합합니다.
연산자 우선순위
??의 연산자 우선순위는 5로 꽤 낮습니다.
따라서 ??는 =와 ? 보다는 먼저, 대부분의 연산자보다는 나중에 평가됩니다.
그렇기 때문에 복잡한 표현식 안에서 ??를 사용해 값을 하나 선택할 땐 괄호를 추가하는 게 좋습니다.
let height = null;
let width = null;
// 괄호를 추가!
let area = (height ?? 100) * (width ?? 50);
alert(area); // 5000
그렇지 않으면 *가 ??보다 우선순위가 높기 때문에 *가 먼저 실행됩니다.
안정성 관련 이슈 때문에 ??는 &&나 ||와 함께 사용하지 못합니다.
제약을 피하려면 괄호를 사용해주세요.
let x = (1 && 2) ?? 3; // 제대로 동작합니다.
alert(x); // 2
<복습 질문> nullish는 어떻게 동작되는가??
'코딩 > 자바스크립트' 카테고리의 다른 글
switch문 (0) | 2022.10.11 |
---|---|
while과 for 반복문 (0) | 2022.10.11 |
논리 연산자 (0) | 2022.10.11 |
if와 '?'를 사용한 조건 처리 (0) | 2022.10.11 |
비교연산자 (0) | 2022.10.11 |