JavaScript中相等判斷和全等判斷

引伸: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)

A === Bcode

在上面的表格中,ToNumber(A) 嘗試在比較前將參數 A 轉換爲數字,這與 +A(單目運算符+)的效果相同。ToPrimitive(A)經過嘗試調用 A 的A.toString() 和 A.valueOf() 方法,將參數 A 轉換爲原始值(Primitive)。對象

通常而言,根據 ECMAScript 規範,全部的對象都與 undefined 和 null 不相等。可是大部分瀏覽器容許很是窄的一類對象(即,全部頁面中的 document.all 對象),在某些狀況下,充當效仿 undefined 的角色。相等操做符就是在這樣的一個背景下。所以,IsFalsy(A) 方法的值爲 true ,當且僅當 效仿 undefined。在其餘全部狀況下,一個對象都不會等於 undefined 或 nullip

由此理解 1中 a在條件語句中會經過Boolean函數轉爲true 或者false,而在判斷中首先調用 a的valueOf方法,而後調用toString方法,再將他們都轉換爲Number,a被轉換爲0,true被裝換爲1,然後來a被轉換爲2,get

在2中,數值與Boolean比較,都將其轉換爲數值類型再比較it

so 只要跟Number或者Boolean類型比較,都會將等式兩邊都轉換爲Numberio

 

全等不通過任何類型轉換的基礎上判斷是否相等console

相關文章
相關標籤/搜索