??????注意
在實(shí)際編程中使用『!==』與『===』馋评,而不要使用『==』 或是 『!=』
if() 表達(dá)式
對(duì)于括號(hào)里的表達(dá)式遵蚜,會(huì)被強(qiáng)制轉(zhuǎn)換為布爾類型 ToBoolean
類型 | 結(jié)果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判斷 |
Number | +0, ?0, 或者 NaN 為 false, 其他為 true |
String | 空字符串為 false,其他都為 true |
Object | true |
==
只需要記住 『undefined == null』,undefined和null與其他類型比較時(shí)锥累,結(jié)果為false。其他類型的值,一般是是通過(guò)強(qiáng)制轉(zhuǎn)化成數(shù)字败去,然后再進(jìn)行比較,
x | y | 結(jié)果 |
---|---|---|
null | undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | toPrimitive(x) == y |
otherwise | otherwise | false |
toNumber
類型 | 結(jié)果 |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
Object | 1. Let primValue be ToPrimitive(input argument, hint Number) 2. Return ToNumber(primValue). |
Object 先調(diào)用
valueOf
得到 原始類型的值 轉(zhuǎn)化為 number 再比較烈拒。如果valueOf
得到的不是原始值圆裕,則調(diào)用toString
。否則報(bào)錯(cuò)
實(shí)例剖析
??[0] == true //false
[0] == true;
// 工作流程
// toNumber轉(zhuǎn)化布爾值為 數(shù)字
[0] == 1;
// toPrimitive 把『object』轉(zhuǎn)化為『原始類型的值』
//[0].valueOf() 轉(zhuǎn)化仍然為誒『object』荆几,再調(diào)用toString()
//[0].toString() -> "0"
"0" == 1;
//toNumber轉(zhuǎn)化 string '1' 為數(shù)字
0 == 1; //false!
??[] == true //false
[] == true;
// 工作流程
// toNumber轉(zhuǎn)化布爾值為 數(shù)字 Number(true)
[] == 1;
// toPrimitive 把『object』轉(zhuǎn)化為『原始類型的值』
//[].valueOf() 轉(zhuǎn)化仍然為誒『object』吓妆,再調(diào)用toString()
//[].toString() -> ""
"0" == 1;
//toNumber轉(zhuǎn)化 string '' 為數(shù)字 Number('')
0 == 1; //false!
??{} == true //false
{} == true;
// 工作流程
// toNumber轉(zhuǎn)化布爾值為 數(shù)字
({}) == 1;
// toPrimitive 把『object』轉(zhuǎn)化為『原始類型的值』
//({}).valueOf(),返回的值是一個(gè)空對(duì)象吨铸,然后再調(diào)用toString()即是({}).valueOf().toString()行拢,返回的是值 "[object Object]",而"[object Object]"轉(zhuǎn)化為`number`的值是NaN诞吱,所以
({}) == 1 // false
({}) == 0 // false
參考
:
!!!Truth, Equality and JavaScript – JavaScript
== if() ===-JS Comparison Table
版權(quán)聲明:本文為博主原創(chuàng)文章舟奠,未經(jīng)博主許可不得轉(zhuǎn)載