codinghatso

nullish 병합 연산자 '??' 본문

WEB/JavaScript_Diary

nullish 병합 연산자 '??'

hatso 2022. 3. 8. 19:05

nullish 병합 연산자(nullish coalescing operator) ??를 사용하면 짧은 문법으로 여러 피연산자 중 그 값이 ‘확정되어있는’ 변수를 찾을 수 있습니다.

a ?? b의 평가 결과는 다음과 같습니다.

  • a가 null도 아니고 undefined도 아니면 a
  • 그 외의 경우는 b

nullish 병합 연산자 ??없이 x = a ?? b와 동일한 동작을 하는 코드를 작성하면 다음과 같습니다.

x = (a !== null && a !== undefined) ? a : b;

예시

let firstName = null;
let lastName = null;
let nickName = "바이올렛";

// null이나 undefined가 아닌 첫 번째 피연산자
alert(firstName ?? lastName ?? nickName ?? "익명의 사용자"); // 바이올렛

'??' 와 '||' 의 차이

nullish 병합 연산자는 OR 연산자 ||와 상당히 유사해 보입니다. 실제로 위 예시에서 ??를 ||로 바꿔도 그 결과는 동일하기까지 하죠.

그런데 두 연산자 사이에는 중요한 차이점이 있습니다.

  • ||는 첫 번째 truthy 값을 반환합니다.
  • ??는 첫 번째 정의된(defined) 값을 반환합니다.

null과 undefined, 숫자 0을 구분 지어 다뤄야 할 때 이 차이점은 매우 중요한 역할을 합니다.

let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0

'||' 는 0도 falsy 한 값으로 취급해서 100을 출력하게 되버린다.

'??'는 null 이나 undefined 일 경우에만 100을 출력하게 되어있다.

 

'??'의 연산자 우선순위는 5로 낮습니다.

때문에 복잡한 표현식 안에서는 괄호를 추가하는 것이 좋습니다.

 

안정성 관련 이슈 때문에 ?? 는 &&나 || 와 함께 사용하지 못합니다.

'WEB > JavaScript_Diary' 카테고리의 다른 글

HTML 문서에 태그 삽입 API 2가지  (0) 2022.03.24
뷰포트에 상대적인 위치정보를 제공하는 API  (0) 2022.03.12
Arrow function 화살표 함수  (0) 2022.03.08
this 키워드  (0) 2022.03.08
클래스 상속 (Inherit)  (0) 2022.03.06
Comments