coercionobject-is

==와 ===의 차이를 설명해 주세요

예상 시간
6
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

`==`를 절대 쓰면 안 되나요?

부가 설명

0 == false; // true
0 === false; // false
 
"1" == 1; // true
"1" === 1; // false
 
null == undefined; // true
null === undefined; // false

==가 항상 나쁜 것은 아니지만, 비교 규칙을 정확히 알고 써야 합니다. 대부분의 코드에서는 읽는 사람이 변환 규칙을 떠올리지 않게 만드는 편이 더 안전합니다.

객체 비교에서는 둘 다 참조를 비교합니다.

{} === {}; // false
 
const a = {};
const b = a;
a === b; // true

===도 모든 edge case를 직관적으로 처리하는 것은 아닙니다. 예를 들어 NaN === NaN은 false이고, Object.is(NaN, NaN)은 true입니다. 또 Object.is(0, -0)은 false입니다.

React의 state 비교나 memoization에서는 Object.is가 등장할 수 있습니다. 일반 비교는 ===가 기본이지만, equality에도 여러 수준이 있습니다.

한 줄 정리

==는 변환 후 비교하고, ===는 변환 없이 타입과 값을 비교하므로 보통은 ===를 기본으로 두는 편이 안전합니다.