Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Khác biệt giữa toán tử = và == trong JavaScript

Đây là một trong những khái niệm cơ bản nhất nhưng cũng dễ gây nhầm lẫn cho người mới: toán tử gán (=) khác hoàn toàn với toán tử so sánh lỏng lẻo (==).

Bảng so sánh nhanh

Toán tửTên gọiChức năngTrả về
=Assignment (Gán)Gán giá trị bên phải cho biến bên tráiGiá trị vừa gán
==Loose Equality (So sánh lỏng)So sánh giá trị sau khi ép kiểutrue / false
===Strict Equality (So sánh chặt)So sánh cả giá trị và kiểu dữ liệutrue / false

Ví dụ minh họa

<html>
<body>
  <p id="demo"></p>
  <script>
    var x = 5;       // Toán tử gán: x nhận giá trị 5
    var y = "6";     // Toán tử gán: y nhận chuỗi "6"

    document.write("x = " + x + "<br>"); // 5
    
    // Toán tử == : ép kiểu "6" thành số 6 rồi so sánh
    document.getElementById("demo").innerHTML = (x == y); // false (5 != 6)
    
    // So sánh thêm với ===
    document.write("x === y: " + (x === y) + "<br>"); // false (number !== string)
    document.write("x == 5: " + (x == 5) + "<br>");   // true
    document.write("x === 5: " + (x === 5) + "<br>");  // true
  </script>
</body>
</html>

Cơ chế ép kiểu của == (Type Coercion)

Khi so sánh hai giá trị khác kiểu, == sẽ cố gắng chuyển chúng về cùng kiểu (thường là số) trước khi so sánh:

  • 5 == "5" → true (chuỗi "5" thành số 5)
  • true == 1 → true
  • false == 0 → true
  • null == undefined → true (quy tắc đặc biệt)
  • "" == 0 → true

Tại sao nên tránh == và dùng ===?

  1. Dự đoán được hành vi: === không ép kiểu, logic so sánh minh bạch.
  2. Tránh bug tinh vi: Ví dụ "" == 0 là true nhưng "" === 0 là false.
  3. Hiệu năng: === nhanh hơn một chút do bỏ qua bước ép kiểu.
  4. Quy tắc code style: Hầu hết style guide (Airbnb, Google, Standard) đều yêu cầu dùng ===.

Mẹo nhớ

  • = là một gạch ngang → một chiều (gán từ phải sang trái).
  • == là hai gạch ngang → so sánh hai giá trị (có ép kiểu).
  • === là ba gạch ngang → so sánh ba yếu tố: giá trị, kiểu, và... chặt chẽ hơn.