Toán tử so sánh lỏng lẻo (==) cho phép so sánh hai toán hạng bằng cách chuyển đổi giá trị về kiểu chung trước rồi mới kiểm tra sự bằng nhau.
Toán tử so sánh nghiêm ngặt (===) kiểm tra cả giá trị và kiểu dữ liệu. Chỉ trả về true nếu cả giá trị và kiểu đều khớp.
Ví dụ
<!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Strict vs Loose equality</title> <style> body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; } .result { font-size: 20px; font-weight: 500; color: blueviolet; } </style> </head> <body> <h1>So sánh nghiêm ngặt vs So sánh lỏng lẻo</h1> <div class="result"></div> <br /> <button class="Btn">NHẤN VÀO ĐÂY</button> <h3>Nhấn nút để xem các so sánh bằng loose equality và strict equality</h3> <script> let resEle = document.querySelector(".result"); let BtnEle = document.querySelector(".Btn"); BtnEle.addEventListener("click", () => { resEle.innerHTML = "Theo loose equality <br>"; if (1 == "1") { resEle.innerHTML += "1 bằng '1'<br>"; } if (undefined == null) { resEle.innerHTML += "undefined bằng null <br>"; } resEle.innerHTML += "<br>Theo strict equality <br>"; if (1 === "1") { resEle.innerHTML += "1 bằng '1'<br>"; } else { resEle.innerHTML += "1 KHÔNG bằng '1'<br>"; } if (undefined === null) { resEle.innerHTML += "undefined bằng null <br>"; } else { resEle.innerHTML += "undefined KHÔNG bằng null <br>"; } }); </script> </body> </html>
Kết quả
Khi nhấn nút:
- Loose equality: 1 == "1" → true, undefined == null → true
- Strict equality: 1 === "1" → false (kiểu khác), undefined === null → false
Khuyến nghị: Luôn dùng === (và !==) để tránh hành vi ép kiểu ngầm gây bug khó tìm. Chỉ dùng == khi bạn thực sự hiểu và muốn tận dụng type coercion (hiếm khi).