== so sánh sau khi ép kiểu; === so sánh cả giá trị lẫn kiểu, không ép.
javascript
0 == '0' // true — chuỗi '0' bị ép thành số 0
0 === '0' // false — number vs string
null == undefined // true — quy tắc riêng của spec
null === undefined // false
'' == 0 // true
[] == false // true — [] → '' → 0
NaN == NaN // false
NaN === NaN // false — NaN không bằng chính nó, dù == hay ===Bảng ép kiểu của == có nhiều trường hợp phản trực giác, đó là lý do gần như mọi bộ quy tắc lint đều bật eqeqeq.
Ngoại lệ duy nhất đáng dùng ==: kiểm tra "null hoặc undefined" trong một phép so sánh.
javascript
if (value == null) { } // bắt cả null và undefined
if (value === null || value === undefined) { } // dài hơn, cùng nghĩaĐừng nhầm với Object.is:
javascript
Object.is(NaN, NaN) // true — khác ===
Object.is(0, -0) // false — khác ===Chốt: trả lời được "== ép kiểu" là mức cơ bản; nêu được value == null là cách viết hợp lệ và Object.is xử lý NaN/-0 mới là mức trên.