== (Abstract Equality)
Thực hiện ép kiểu (type coercion) trước khi so sánh.
5 == "5" // true
0 == false // true
null == undefined // true
"" == 0 // true
=== (Strict Equality)
So sánh cả kiểu và giá trị, không ép kiểu.
5 === "5" // false
0 === false // false
null === undefined // false
"" === 0 // false
Quy tắc ép kiểu của == (rút gọn)
- Null/Undefined: chỉ bằng nhau.
- Số vs Chuỗi: chuỗi → số.
- Boolean → Số (true=1, false=0).
- Object → Primitive (valueOf/toString).
Khuyến nghị mạnh mẽ
Luôn dùng === (và !==) trừ khi có lý do rõ ràng cần ép kiểu. Code dễ đọc, ít bug, hiệu năng tương đương.
Ngoại lệ hiếm
Kiểm tra null/undefined cùng lúc: value == null (chỉ true cho null hoặc undefined). Nhiều codebase cho phép ngoại lệ này.