==:等同,比較運算符,兩邊值類型不同的時候,先進行類型轉換,再比較;===:恆等,嚴格比較運算符,不做類型轉換,類型不同就是不等;Object.is()是ES6新增的用來比較兩個值是否嚴格相等的方法,與===的行為基本一致。-
-
先說
===,這個比較簡單,只需要利用下面的規則來判斷兩個值是否恆等就行了:- 如果類型不同,就不相等
- 如果兩個都是數值,並且是同一個值,那么相等;
- 值得注意的是,如果兩個值中至少一個是NaN,那么不相等(判斷一個值是否是NaN,可以用
isNaN()或Object.is()來判斷)。
- 值得注意的是,如果兩個值中至少一個是NaN,那么不相等(判斷一個值是否是NaN,可以用
- 如果兩個都是字符串,每個位置的字符都一樣,那么相等;否則不相等。
- 如果兩個值都是同樣的Boolean值,那么相等。
- 如果兩個值都引用同一個對象或函數,那么相等,即兩個對象的物理地址也必須保持一致;否則不相等。
- 如果兩個值都是null,或者都是undefined,那么相等。
-
再說
Object.is(),其行為與===基本一致,不過有兩處不同:- +0不等於-0。
- NaN等於自身。
舉個栗子☺:
+0 === -0 //true NaN === NaN // false Object.is(+0, -0) // false Object.is(NaN, NaN) // true
-
