== (Loose)
Tự ép kiểu trước khi so sánh — "5" == 5 là true
Equality Comparisons (so sánh bằng) là cách JavaScript kiểm tra xem hai giá trị có “bằng nhau” hay không. Khi bạn viết biểu thức so sánh (ví dụ: a == b hoặc a === b), JavaScript sẽ kiểm tra mối quan hệ giữa hai giá trị theo quy tắc riêng của từng toán tử.
== (Loose)
Tự ép kiểu trước khi so sánh — "5" == 5 là true
=== (Strict)
Không ép kiểu — phải cùng kiểu VÀ cùng giá trị
Object.is()
Giống === nhưng xử lý đúng NaN và phân biệt +0 / -0
"5" == 5; // true — ép "5" thành 50 == false; // true — ép false thành 0null == undefined; // true — quy tắc đặc biệt"" == 0; // true — ép "" thành 0"5" === 5; // false — khác kiểu0 === false; // false — number ≠ booleannull === undefined; // false — khác kiểu5 === 5; // true — cùng kiểu, cùng giá trịObject.is(NaN, NaN); // true (NaN === NaN là false!)Object.is(+0, -0); // false (+0 === -0 là true!)Object.is("5", 5); // false — giống ===Object.is(5, 5); // true — giống =====, ===, và Object.is()| Đặc điểm | == (Loose) | === (Strict) | Object.is() |
|---|---|---|---|
| Chuyển đổi kiểu | ✅ Có | ❌ Không | ❌ Không |
| So sánh kiểu | JS tự ép kiểu | Phải giống nhau | Phải giống nhau |
"5" vs 5 | ✅ true | ❌ false | ❌ false |
0 vs false | ✅ true | ❌ false | ❌ false |
null vs undefined | ✅ true | ❌ false | ❌ false |
NaN vs NaN | ❌ false | ❌ false | ✅ true |
+0 vs -0 | ✅ true | ✅ true | ❌ false |
| Khuyến nghị | ⚠️ Hạn chế dùng | 🔹 Dùng mặc định | 🔸 Trường hợp đặc biệt |