== (Loose/Abstract Equality)
Thực hiện type coercion (ép kiểu) trước khi so sánh.
4 == 4 // true
"4" == 4 // true
4 == "4" // 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.
4 === 4 // true
4 === "4" // false
0 === false // false
null === undefined // false
"" === 0 // false
Quy tắc ép kiểu của == (tóm tắt)
- Cùng kiểu → so sánh ===.
- Null/Undefined → bằng nhau.
- Number vs String → String → Number.
- Boolean → Number (true=1, false=0).
- Object vs Primitive → Object → Primitive (valueOf/toString).
Ví dụ object
var v1 = {value: 'key'};
var v2 = {value: 'key'};
v1 == v2 // false (tham chiếu khác)
v1 === v2 // false
Khuyến nghị tuyệt đối
Luôn dùng === và !==. Tránh == trừ trường hợp đặc biệt value == null (kiểm tra null/undefined cùng lúc).