引伸:1.var a =[0] if(a) console.log(a==true) ; a=[2];a==true; //打印結果爲false 瀏覽器
2. var b = 2 ;if(b) console.log(b==true) // 打印結果爲false函數
一下表格反應了當進行A==B判斷是進行的操做,一下內容來自https://developer.mozilla.org spa
被比較值 B | |||||||
---|---|---|---|---|---|---|---|
Undefined | Null | Number | String | Boolean | Object | ||
被比較值 A | Undefined | true |
true |
false |
false |
false |
IsFalsy(B) |
Null | true |
true |
false |
false |
false |
IsFalsy(B) |
|
Number | false |
false |
A === B |
A === ToNumber(B) |
A=== ToNumber(B) |
A=== ToPrimitive(B) |
|
String | false |
false |
ToNumber(A) === B |
A === B |
ToNumber(A) === ToNumber(B) |
ToPrimitive(B) == A |
|
Boolean | false |
false |
ToNumber(A) === B |
ToNumber(A) === ToNumber(B) |
A === B |
ToNumber(A) == ToPrimitive(B) | |
Object | false | false | ToPrimitive(A) == B |
ToPrimitive(A) == B |
ToPrimitive(A) == ToNumber(B) |
|
在上面的表格中,ToNumber(A)
嘗試在比較前將參數 A 轉換爲數字,這與 +A(單目運算符+)的效果相同。ToPrimitive(A)
經過嘗試調用 A 的A.toString()
和 A.valueOf()
方法,將參數 A 轉換爲原始值(Primitive)。對象
通常而言,根據 ECMAScript 規範,全部的對象都與 undefined
和 null
不相等。可是大部分瀏覽器容許很是窄的一類對象(即,全部頁面中的 document.all
對象),在某些狀況下,充當效仿 undefined
的角色。相等操做符就是在這樣的一個背景下。所以,IsFalsy(A)
方法的值爲 true
,當且僅當 A
效仿 undefined
。在其餘全部狀況下,一個對象都不會等於 undefined
或 null
。ip
由此理解 1中 a在條件語句中會經過Boolean函數轉爲true 或者false,而在判斷中首先調用 a的valueOf方法,而後調用toString方法,再將他們都轉換爲Number,a被轉換爲0,true被裝換爲1,然後來a被轉換爲2,get
在2中,數值與Boolean比較,都將其轉換爲數值類型再比較it
so 只要跟Number或者Boolean類型比較,都會將等式兩邊都轉換爲Numberio
全等不通過任何類型轉換的基礎上判斷是否相等console