카테고리 없음

javascript의 || 와 ??의 차이점

곽빵 2023. 12. 23. 15:07

개요

|| ??의 차이점이 항상 헷갈려서 차이점을 기준으로 정리해두자

 

|| 연산자 (Logical OR)

  • 기능: 두 피연산자 중 하나라도 "truthy" 값일 경우 해당 값을 반환한다
  • 동작 방식: 첫 번째 피연산자가 truthy (참으로 평가되는 값)이면, 첫 번째 값을 반환, 그렇지 않으면 두 번째 값을 반환한다
  • 주의점: javascript에서 0, '' (빈 문자열), NaN, false, null, undefined 등은 모두 falsy 값으로 간주되므로, 이러한 값들 중 하나가 첫 번째 피연산자로 사용될 경우, || 연산자는 두 번째 피연산자를 반환한다.

?? 연산자 (Nullish Coalescing)

  • 기능: 두 피연산자 중 첫 번째 값이 null 또는 undefined일 경우에만 두 번째 값을 반환합니다.
  • 동작 방식: 첫 번째 피연산자가 null 또는 undefined가 아니면 첫 번째 값을 반환하고, 그렇지 않으면 두 번째 값을 반환합니다.
  • 주의점: ||와 달리 0, NaN, '' (빈 문자열) 등은 falsy 값이지만, null이나 undefined가 아니기 때문에, 이러한 값들이 첫 번째 피연산자로 사용될 경우 ?? 연산자는 그 값을 그대로 반환합니다.

예시

let a;
console.log(a || 'default'); // "default" 반환 (a가 undefined이므로)
console.log(a ?? 'default'); // "default" 반환 (a가 undefined이므로)

a = 0;
console.log(a || 'default'); // "default" 반환 (a가 0이므로 falsy)
console.log(a ?? 'default'); // 0 반환 (a가 null 또는 undefined가 아니므로)

 

결론적으로 || 어떤 값이 falsy 대체 값을 제공하는 데에 쓰이고, ?? 값이 명확하게 없는 (null이나 undefined) 경우에 대체 값을 제공하는 데에 사용하면 될듯하다. 즉 ??는 0과 ''이 프로그래밍상 의미있는 데이터이며 falsy한 값과 구별해서 처리해야 한다면 ??을 사용하는게 맞는듯? 하다.