JS相等操作符(== 和===)

“ 和“=”運算符用於比較兩個值是否相等,當然它們對相等的定義不盡相同。兩個運算符允許比較任意類型的操作數,如果操作數相等則返回true,否則返回false.
下面表格展示不同類型的值用相等操作符比較後的結果。

類型(x) 類型(y) 結果
null undefined true
undefined null true
數字 字符串 x == toNumber(y)
字符 數字 toNumber(x) == y
布爾值 任何類型 toNumber(x) == y
任何類型 布爾值 x == toNumber(y)
字符串或數字 對象 x == toPrimitive(y)
對象 字符串或數字 toPrimitive(x) == y

如果x和y是相同類型,JavaScript會比較它們的值或對象。其他沒有列在這個表格的情況都會返回false.
toNumber 方法對不同類型返回的結果如下:

值類型 結果
undefined NaN
null +0
布爾值 如果是 true ,返回 1 ;如果是 false ,返回 +0
數字 數字對應的值
字符串 將字符串解析成數字。如果字符串中包含字母,返回 NaN ;如果是由數字字符組成的,轉換成數字
對象 Number(toPrimitive(vale))

toPrimitive 方法對不同類型返回的結果如下:

值類型 結 果
對象 如果對象的 valueOf 方法的結果是原始值,返回原始值。如果對象的 toString方法返回原始值,就返回這個值;其他情況都返回一個錯誤

那麼 === 操作符呢?簡單多了。如果比較的兩個值類型不同,比較的結果就是 false 。如果
比較的兩個值類型相同,結果會根據下表判斷。

類型(x) 結 果
數字 x和y數值相同(但不是 NaN ) true
字符串 x和y是相同的字符 true
布爾值 x和y都是 true 或 false true
對象 x和y引用同一個對象 true

如果x和y類型不同,結果就是 false 。

注意:對象間的比較的的話是比較對象的內存地址而不是比較值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章