===(엄격한 동등 비교)는 변환 없이 값과 타입을 비교합니다. ==(느슨한 동등 비교)는 먼저 **타입 강제 변환(type coercion)**을 수행하며, 이는 예상치 못한 결과로 이어집니다.
js
0 == "0"; // true — "0"이 0으로 변환됨
0 == ""; // true — ""가 0으로 변환됨
0 == false; // true — false가 0으로 변환됨
null == undefined; // true — 특별 규칙
"" == false; // true
=== ;
=== ;
== 가 위험한 이유
강제 변환 규칙은 직관적이지 않아 버그로 이어집니다. 예를 들어 [] == ![]는 true입니다(악명 높은 기괴함). 비교 중에 JavaScript가 뒤에서 조용히 타입을 변환하는 것을 원하는 경우는 거의 없습니다.
규칙
항상 ===(그리고 !==)를 사용하세요. 흔하고 의도적인 유일한 예외는 null 또는 undefined를 함께 확인하는 경우입니다:
js
if (value == null) { ... } // null과 undefined 둘 다에 대해 true — 의도적인 관용구
그 외 모든 경우에는 엄격한 동등 비교가 비교를 예측 가능하게 유지합니다. 객체를 비교하려면 깊은 동등성(deep-equality) 검사가 필요합니다(객체는 참조로 비교되므로 {a:1} === {a:1}은 false입니다).
