”“ 和“=”運算符用於比較兩個值是否相等,當然它們對相等的定義不盡相同。兩個運算符允許比較任意類型的操作數,如果操作數相等則返回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 。
注意:對象間的比較的的話是比較對象的內存地址而不是比較值。