coercionobject-is
==와 ===의 차이를 설명해 주세요
- 예상 시간
- 6분
30초 답변
꼬리질문
조금 더 깊게 물어본다면
답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.
`==`를 절대 쓰면 안 되나요?
`null == undefined`가 true인 이유는 무엇인가요?
객체는 왜 내용이 같아도 false가 나오나요?
`Object.is`는 언제 신경 써야 하나요?
부가 설명
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에도 여러 수준이 있습니다.
한 줄 정리
==는 변환 후 비교하고, ===는 변환 없이 타입과 값을 비교하므로 보통은 ===를 기본으로 두는 편이 안전합니다.