병합 연산자

YangJiWon·2020년 9월 3일
0

null 병합 연산자 '??'

  • null 병합 연산자 ??를 사용하면 짧은 문법으로 여러 피연산자 중 그 값이 '확정되어 있는' 변수를 찾을 수 있습니다.
    a ?? b의 평가 결과는 다음과 같습니다.
  • a가 null도 아니고 undefined도 아니면 a
  • 그 외의 경우는 b
    ??에는 두 개의 주의할 사항이 있습니다.
  1. 연산자 우선순위가 낮아 이를 유의해야합니다.
  2. **안정성 관련 이슈 때문에 ??는 &&나 ||와 함께 사용하지 못합니다.

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

null 병합 연산자는 OR 연산자 ||와 상당히 유사해 보입니다. 하지만 두 연산자 사이에는 중요한 차이점이 있습니다.

  • ||는 첫 번째 truthy 값을 반환합니다.
  • ??는 첫 번째 정의된 값을 반환합니다.
    이는 null과 undefined, 숫자 0을 구분 지어 다뤄야할 때 이 차이점은 매우 중요한 역할을 합니다.
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이라는 값을 할당했기 때문에 alert창엔 0이 출력됩니다.

요약

  • null 병합 연산자 ??를 사용하면 피연산자 중 '값이 할당된 변수를 빠르게 찾을 수 있습니다.
    ??는 변수에 기본값을 할당하는 용도로 사용할 수 있습니다.
// height가 null이나 undefined인 경우, 100을 할당
height = height ?? 100;
  • ??의 연산자 우선순위는 대다수의 연산자보다 낮고 ?와 = 보다는 높습니다.
  • 괄호 없이 ??를 ||나 &&와 함께 사용하는 것은 금지되어있습니다.
profile
데이터데이터데이터!!

0개의 댓글