iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
Modern Web

從零開始的JS學習之路系列 第 6

[Day06] 自動轉型

兩等號與三等號( == 與 === )的差別

在 JavaScript 裡一個等號 = 代表的意思是指定、賦值。
而兩個等號跟三個等號是用來比較數值。

比較運算子(Comparison Operators)

兩等號 ==:若兩邊型別不同會自動轉型再進行比較。
三等號 ===:不做轉型直接比較。

容易造成的誤解:兩等號不檢查型別,三等號會檢查型別。
真相是:兩等號會自動轉型,三等號不會。

var a = 21;
var b = "21";

console.log(a==b); // true,b 字串被自動轉型成數字所以相等
console.log(a===b); // false,不做轉型直接比較

再來看看一些有趣的結果

true == 1; // true,左邊 true 布林值轉數字是 1
true == "true"; // false,"true" 字串轉成數字是 NaN
false == 0; // true,左邊 false 布林值轉數字是 0
false == "false"; // false,"false" 轉數字也是 NaN
[] == []; // false,記憶體位置不同

轉自 MDN 比較運算子

P.S. => 是 ES6 的箭頭函式,不是運算子,可以用書寫順序不同來分別。

自動轉型的規則

JavaScript 經常會對兩側數值做自動轉型,規則如下:

  • 其一為 Boolean,會將布林值轉為數字。
  • 若字串與數字做比較,會將字串透過 Number() 嘗試轉成數字,再進行比較。
  • 其一為物件另一方為基本型別,會透過 valueOf() 方法取得對應的基本型別的值,再進行比較。
  • NaN 不等於 NaN,兩等或三等都一樣。
  • 兩個 Object 進行比較,會看兩者是否指向同一個實體(記憶體位置)
  • 字串大於小於的比較,會依照字母的順序(standard lexicographical ordering)進行比較。大小寫 unicode 的順序不一樣

一般不會遇到太多極端的情況(如果遇到了就只能...),這裡有一個真值表可以仔細觀察轉型規則。

參考資料
0 陷阱!0 誤解!8 天重新認識 JavaScript!
MDN 比較運算子
真值表轉自 https://thomas-yang.me/projects/oh-my-dear-js/


上一篇
[Day05] 運算式與運算子
下一篇
[Day07] 賦值運算子、逗號運算子、邏輯運算子筆記
系列文
從零開始的JS學習之路30

尚未有邦友留言

立即登入留言