相等判斷
JavaScript提供三種不同的值比較操作:
- 嚴格相等 ("triple equals" 或 "identity"),使用 === ,
- 寬松相等 ("double equals") ,使用 ==
- 以及
Object.is
(ECMAScript 2015/ ES6 新特性)
簡而言之,在比較兩件事情時,雙等號將執行類型轉換; 三等號將進行相同的比較,而不進行類型轉換 (如果類型不同, 只是總會返回 false ); 而Object.is的行為方式與三等號相同,但是對於NaN和-0和+0進行特殊處理,所以最后兩個不相同,而Object.is(NaN,NaN)將為 true
。(通常使用雙等號或三等號將NaN與NaN進行比較,結果為false,因為IEEE 754如是說.) 請注意,所有這些之間的區別都與其處理原語有關; 這三個運算符的原語中,沒有一個會比較兩個變量是否結構上概念類似。對於任意兩個不同的非原始對象,即便他們有相同的結構, 以上三個運算符都會計算得到 false 。
什么時候使用 Object.is 或者 三等
object.is 會對對象屬性描述進行判斷,如果不需要判斷屬性描述的情況下應優先使用三等
對象屬性描述 參考 Object.defineProperty
類型判斷
這里列舉出常用的三種方法可以判斷數據的類型
- typeof (obj)
- obj instanceof constructor
- obj.constructor
先說第一種 typeof
typeof只能用於判斷基本類型(即非引用類型 Boolean
, Function
, Number
, String
, undefined,)如
var arr = ['eko','tom','jerry'] ; console.log(typeof(arr)); 結果輸出:object
再來說說第二種 instanceof
instanceof
運算符用來測試一個對象在其原型鏈中是否存在一個構造函數的 prototype
屬性
//使用格式 object instanceof constructor
實例 console.log(arr instanceof Array); 輸出: true
用着中辦法可以判斷出引用類型的類型
第三種 object.constructor
constructor 是對象__proto__中的一個屬性,指向其構造函數
console.log(arr.constructor==Array); 輸出:true