Bỏ qua để đến nội dung

Loose Equality Operator (==)

Toán tử == (loose equality) so sánh giá trị giữa hai toán hạng sau khi JavaScript tự động chuyển đổi kiểu dữ liệu (type coercion) nếu cần.

"5" == 5; // true — "5" bị ép thành 5
0 == false; // true — false bị ép thành 0

JavaScript thực hiện ép kiểu theo thuật toán Abstract Equality Comparison (spec ECMA-262):

Nếu hai toán hạng cùng kiểu, == hoạt động giống hệt ===:

5 == 5; // true
"hello" == "hello"; // true
null == null; // true

a == b
├─ Cùng kiểu? → So sánh giống ===
├─ null/undefined? → null == undefined = true, còn lại false
├─ Number vs String? → String → Number
├─ Boolean? → Boolean → Number, rồi so sánh lại
└─ Object vs Primitive? → Object → toPrimitive(), rồi so sánh lại

"" == 0; // true — "" → 0
"0" == false; // true — false → 0, "0" → 0
"\t\n" == 0; // true — whitespace → 0
[] == false; // true — [] → "" → 0, false → 0
[] == ![]; // true — ![] → false → 0, [] → "" → 0

Trường hợp duy nhất== được cộng đồng chấp nhận:

// Kiểm tra null hoặc undefined cùng lúc
if (x == null) {
// x là null HOẶC undefined
}
// Tương đương với:
if (x === null || x === undefined) {
// ...
}

Quy tắcVí dụKết quả
Cùng kiểu → giống ===5 == 5true
null == undefinednull == undefinedtrue
String → Number"5" == 5true
Boolean → Numbertrue == 1true
Object → toPrimitive[1] == 1true