js中=、==、===三個的區別是什麼?並說明它們各自的工作過程

王铁柱6發表於2024-11-23

在 JavaScript 中,=, ===== 都是比較運算子,但它們的工作方式和比較的嚴格程度有所不同:

1. = (賦值運算子)

  • 作用: 不進行比較,而是將右側的值賦給左側的變數。
  • 工作過程: 簡單地將右側運算元的值儲存到左側運算元表示的變數中。
let x = 5; // 將值 5 賦給變數 x

2. == (相等運算子)

  • 作用: 比較兩個值是否相等,在比較之前會進行型別轉換 (也稱為強制型別轉換)。
  • 工作過程:
    1. 如果兩個運算元的型別相同,則直接比較它們的值。
    2. 如果兩個運算元的型別不同,則會嘗試將其中一個或兩個運算元轉換為相同的型別,然後再進行比較。 轉換的規則比較複雜,但一些常見的規則包括:
      • 將 null 和 undefined 轉換為數字時,它們會被轉換為 0 和 NaN。
      • 將布林值轉換為數字時,true 轉換為 1,false 轉換為 0。
      • 將字串轉換為數字時,如果字串可以解析為數字,則將其轉換為相應的數字;否則轉換為 NaN。
      • 將物件與數字或字串比較時,會嘗試將物件轉換為原始值(透過呼叫 valueOf()toString() 方法)。
console.log(5 == '5');   // true,字串 '5' 會被轉換為數字 5
console.log(true == 1);  // true,布林值 true 會被轉換為數字 1
console.log(null == undefined); // true,這是一個特殊情況
console.log(0 == false); // true, false 轉換為 0
console.log('0' == false); //true,  '0' 和 false 都轉為 0
console.log(0 == ''); // true, '' 轉為 0
console.log(null == false); // false, null 只和 undefined 相等
console.log(undefined == false); // false, undefined 只和 null 相等

3. === (嚴格相等運算子)

  • 作用: 比較兩個值是否相等,不會進行型別轉換。 只有當兩個運算元的型別和值都相同時,才返回 true。
  • 工作過程:
    1. 比較兩個運算元的型別。
    2. 如果型別不同,則直接返回 false。
    3. 如果型別相同,則比較它們的值。
console.log(5 === '5');   // false,型別不同
console.log(true === 1);  // false,型別不同
console.log(null === undefined); // false,雖然 `==` 返回 true,但它們型別不同
console.log(0 === false); // false,型別不同
console.log('0' === false); // false, 型別不同
console.log(0 === ''); // false, 型別不同

總結:

為了避免型別轉換帶來的意外結果,建議在大多數情況下使用 === 進行比較。 只有當你明確需要進行型別轉換時,才使用 ==。 而=是賦值操作,不是比較。

希望這個解釋能夠幫助你理解 JavaScript 中這三個運算子的區別。

相關文章