1. null 병합 연산자(nullish coalescing operator)
??를 사용하면 짧은 문법으로 여러 피연산자 중 그 값이 ‘확정되어있는’ 변수를 찾을 수 있다.
a ?? b의 평가 결과는 다음과 같습니다.
- a가 null도 아니고 undefined도 아니면 a
- 그 외의 경우는 b
다음 예시를 통해 살펴보자.
let firstName = null;
let lastName = null;
let nickName = "Supercoder";
// null이나 undefined가 아닌 첫 번째 피연산자
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
2. '||' 와 '??'의 차이
null 병합 연산자는 OR 연산자 ||와 상당히 유사하다.
실제로 위 예시에서 ??를 ||로 바꿔도 그 결과는 동일하다.
그런데 두 연산자 사이에는 중요한 차이점이 있다.
- ||는 첫 번째 truthy 값을 반환한다.
- ??는 첫 번째 정의된(defined) 값을 반환한다.
null과 undefined, 숫자 0을 구분 지어 다뤄야 할 때 이 차이점은 매우 중요한 역할을 한다.
예시를 살펴보자.
let height = 0;
alert(height || 100); // 100
alert(height ?? 100); // 0
height 변수에는 0이라는 number type의 data가 할당되어있다. 즉 정의된 값이다.
하지만 || 연산자는 첫 번째 값이 falsy 하다면 false로 간주한다.
자바스크립트에는 6가지 falsy한 값이 있다. null, undefined, 0, 빈 문자열, NaN, false가 그것이다.
그렇기 때문에 100을 출력한다.
반면 ?? 연산자는 그 값이 falsy 하다하더라도 정의된 값이면 해당 값을 반환하기 때문에 0을 출력한다.
즉 height가 null과 undefined일때만 100을 출력할 것이다.
3. 연산자 우선순위와 주의사항
'??'의 연산자 우선순위는 5로 꽤 낮다.
따라서 ??는 =와 ? 보다는 먼저, 대부분의 연산자보다는 나중에 평가된다.
그렇기 때문에 복잡한 표현식 안에서 ??를 사용해 값을 하나 선택할 땐 괄호를 추가하는 게 좋다.
또한 주의사항으로는 안정성 관련 이슈 때문에 ??는 &&나 ||와 함께 사용하지 못합니다.
아래 예시를 실행하면 문법 에러가 발생한다.
let x = 1 && 2 ?? 3; // SyntaxError: Unexpected token '??'
//제약을 피하려면 괄호를 사용해주세요.
let x = (1 && 2) ?? 3; // 제대로 동작합니다.
alert(x); // 2
*출처 : ko.javascript.info/nullish-coalescing-operator#ref-138
'Programming Language > Javascript' 카테고리의 다른 글
ES6 - 함수 표현식, 화살표 함수 (0) | 2021.01.09 |
---|---|
ES6 - Promise & Async/Await (0) | 2021.01.04 |
ES6 - 구조 분해 할당 (0) | 2020.12.31 |
ES6 - Class(1) (0) | 2020.12.29 |
Rest Parameter & Spread Syntax (0) | 2020.11.06 |