JavaScript 2.12

1 minute read

null 병합 연산자 ‘??’

  • Null 병합 연산자 ??를 사용하면 짧은 문법으로 여러 피연산자 중 그 값이 ‘확정되어 있는 ‘ 변수를 찾을 수 있다.
  • a ?? b의 평가 결과는 다음과 같다.
    • a 가 null 도 아니고 undefined 도 아니면 a
    • 그 외의 경우는 b
  • null 병합 연산자 ??없이 x = a ?? b와 동일한 동작을 하는 코드는 다음과 같다
    • x = (a !== null && a !== undefined) ? a : b;
let firstName = null;
let lastName = null;
let nickName = "Supercoder";

// null이나 undefined가 아닌 첫 번째 피연산자
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
  • 세 변수 중 값이 정해진 변수의 값을 출력하는데 세 변수 모두 값이 정해지지 않았다면 Anonymous가 출력된다.

??와 or 의 차이

  • null 병합 연산자는 or 연산자와 상당히 유사해보인다.
  • 하지만 차이가 있다.
    • or는 첫번째 truthy 값을 반환한다.
    • ??는 첫번째 정의된(defined) 값을 반환한다.
  • null과 undefined, 숫자 0을 구분지어 다뤄야 할 때 이 차이점이 중요한 역할을 한다.
let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0
  • or는 0을 falsy한 값으로 취급하기 때문에 100이 반환된다.
  • 하지만 ??는 0을 할당한 것으로 취급해서 0이 반환된다.

연산자 우선순위

  • ??의 연산자 우선순위는 5로 꽤 낮다
  • 따라서 =와 ?보다는 먼저, 대부분의 연산자보다는 나중에 평가된다.
  • 복잡한 표현식 안에서 ??를 사용하려면 괄호를 추가하는 것이 좋다.

Categories:

Updated: