js中的==與===

咱們都知道js中判斷兩個數是否相等有兩個操做符=======是不嚴格相等,在比較過程當中會先將比較數進行強制類型轉化,在進行值比較,而===是嚴格相等,它不會對數值的類型進行強制轉換,因此理解爲===會對數進行雙重校驗,先比較類型,再比較值。若是兩個數的類型都不相等,那麼這兩個數確定就不相等啦~markdown

對於===這種嚴格相等比較的話你們基本上不會有什麼異議,可是==真的是傻傻分不清啊!!!函數

如今整理一份便於比較的小tips,請查收~spa

首先js中有個比較特殊的數---NAN,這個數與任意數相比較都爲false,hhhh,甚至與自身作比較時也是falsecode

NaN == "0"  //false
NaN == null  //false
NaN == undefined  //false
NaN == []  //false
NaN == {}  //false
NaN == 0  //false
NaN == false  //false
複製代碼

哈哈哈哈,感受是否是還挺省事,就special,那咱們怎麼判斷一個值是否爲NaN呢,通常經過isNaN()函數判斷的orm

js中還有兩個特殊的數,null和undefined。這兩個值互相等且自身等,其他狀況與誰相比都不相等。ip

null == null  //true
null == undefined  //true
undefined == null  //true 
undefined == undefined  //true
複製代碼

其他的類型都是會隱式轉化成對應的值來作比較的,比較規則以下表:ci

被比較數B
Number String Boolean Object
比較數A Number A === B A === ToNumber( B ) A === ToNumber( B ) A == ToPrimitive( B )
String ToNumber( A ) === B ToNumber( A ) === ToNumber( B ) ToNumber( A ) === ToNumber( B ) ToPrimitive( B ) == A
Boolean ToNumber( A ) === B ToNumber( A ) === ToNumber( B ) ToNumber( A ) === ToNumber( B ) ToNumber( A ) == ToPrimitive( B )
Object ToPrimitive( A ) == B ToPrimitive( A ) == B ToPrimitive( A ) == ToPrimitive( B ) A === B

在上面的表格中,ToNumber(A) 嘗試在比較前將參數 A 轉換爲數字。ToPrimitive(A)經過嘗試調用 A 的A.toString() 和 A.valueOf() 方法,將參數 A 轉換爲原始值(Primitive)。it

相關文章
相關標籤/搜索