왜 한 코드에 ||, ?? 두개 연산자가 섞여서 있죠? 두 개의 차이가 뭐죠?
코드를 리뷰하면서, 이런 질문을 받았었다.
const user = record.user ?? "";
const user = record.user || "";
이처럼 나는 코딩을 짜면서 두 연산자를 그냥 하고 싶은데로 쓰고 있었다. 두 연산자는 어떤 차이가 있고, 어떨 때 쓰는게 효과적일까?
Nullish coalescing operator(널 병합 연산자) 기준 왼쪽 연산자가 null 또는 undefined 값일 때, 오른쪽 연산자가 반환되고, 그렇지 않으면 왼쪽 연산자를 반환하는 논리 연산자다.
Logical OR(논리적 분리)연산자는 연산자 중 하나 이상이 참인 경우에만 참을 반환하는 논리연산자다.
x || y
만약 x를 true로 반환 가능하면, x를 반환하고, 그렇지 않으면 y를 반환한다. 그래서 OR 연산자는 좀 더 넓은 falsy한 값을 사용한다.
null, NaN, 0, "", undefined
그래서 널 병합 연산자 보다 큰 범위가 논리적 연산자라고 생각하면 된다. 그래서 이제 나의 대답은
널 병합 연산자는 해당 값이 null, undefined 값일 경우, 오른쪽 연산자 값을 사용하기 위해 사용했고, 논리적 연산자는 해당 값들 중 참인 값이 있으면 참을 반환하기 위해 사용했습니다.