咱們都知道js中判斷兩個數是否相等有兩個操做符==
和===
。==
是不嚴格相等,在比較過程當中會先將比較數進行強制類型轉化,在進行值比較,而===
是嚴格相等,它不會對數值的類型進行強制轉換,因此理解爲===
會對數進行雙重校驗,先比較類型,再比較值。若是兩個數的類型都不相等,那麼這兩個數確定就不相等啦~markdown
對於===
這種嚴格相等比較的話你們基本上不會有什麼異議,可是==
真的是傻傻分不清啊!!!函數
如今整理一份便於比較的小tips,請查收~spa
首先js中有個比較特殊的數---NAN
,這個數與任意數相比較都爲false
,hhhh,甚至與自身作比較時也是false
code
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