본문 바로가기
개발 및 알고리즘/알고리즘

[JS/typescript] Null 병합 연산자 ?? (물음표 2개)

by 0xseo 2024. 7. 23.
반응형

Javascript 또는 Typescript에서 어떤 변수를 사용할 때 조건에 따라 사용하고 싶으면 if문을 사용한다.

if (var1 == true) {
  let var2 = 0;
} else {
  let var2 = 1;
}



다만 if문 안에서 변수를 선언하는 경우 블록 밖에서는 해당 변수를 사용할 수 없기 때문에 필요한 경우 이런 식으로 응용한다.

let var2 = 1;
if (var1 == true) {
  var2 = 0;
}



조금 더 간단하게 사용하려면 삼항 연산자를 사용하면 된다.

let var2 = 
  var1 == true
	? 0
	: 1;
조건 ? 조건이 참인 경우 값 : 조건이 거짓인 경우 값

 


그러나 조건과 사용하려는 값이 같아지는 경우엔 똑같은 부분을 쓰느라 코드가 중복된다.

let va2 = var1.value ? var1.value : false



조금 더 짧게 줄이고자 OR 연산자를 사용하기도 한다.

let var2 = var1.value || true



OR 연산자를 사용하면 var2에는 var1.value가 존재할 경우 그 값이, 아닐 경우 true가 들어간다.

다만 또다른 문제가 발생하는데, var1.value가 falsy한 값일 경우이다.
OR 연산자는 왼쪽 피연산자의 값이 fasly한 경우 오른쪽 연산을 시작하기 때문이다.

그러니 true/false의 문제가 아니라, 값의 존재여부만 따지고 싶을 땐 null 병합 연산자를 사용하면 된다.

let var2 = var1.value ?? true



null 병합 연산자의 경우 왼쪽 피연산자가 falsy한지를 보는 것이 아니라, null이나 undefined가 아닌지만을 확인한다.
즉 위 코드에서 var1.value가 false여도 null이나 undefined가 아니기 때문에 var2의 값은 false가 될 것이다.

반응형