JavaScript——JS中的"=="轉換規則
阿新 • • 發佈:2018-12-15
我們知道,“=”、“==” 和“===”這三者之間是不一樣的。具體怎樣的不一樣呢?今天來說說“==”的轉換規則。
下面是一張“==”強制轉換規則表。
引數型別1 | 引數型別2 | 強制轉換 |
null | undefined | 不轉換,總是返回true |
null或undefined | 其它任何非null或undefined的型別 | 不轉換,總是返回false |
原始型別:string、number或boolean | Date物件 | 將原始型別轉換成數字;將Date物件轉換為原始型別。(優先嚐試toString方法,再嘗試valueOf方法) |
原始型別:string、number或boolean | 非Data物件 | 將原始型別轉換成數字;將非Date物件轉換為原始型別。(優先嚐試toString方法,再嘗試valueOf方法) |
原始型別:string、number或boolean | 原始型別:string、number或boolean | 將原始型別轉換成數字 |
看了上面的表,我們再來細說一下==的個別常遇見的轉換規則。
1.number型別與string型別比較,string會轉換為number型別
'' == '0' //false 0 == ''//true; 0 == '0'//true ' \t\r\n '==0//true
2.null和undefined型別比較始終相等
null == undefined //true
我之前有寫過一篇null和undefined的區別的文章,有興趣的話可以移駕看看哦~
3.布林型別與其它任何型別進行比較,布林型別將會轉換為number型別
false == 'false'//false
false == '0'//true
false == null//false
null == undefined //true
4.number型別或string型別與object型別進行比較,number或者string型別都會轉換為object型別
var a = 0, b = {};
a == b//false
從上面的表和這四種例子來看,==的轉換規則並不夠嚴謹,如果語句需要特別嚴謹的話,珍愛生命,請使用===和!===
Biu~~~~~~~~