JS 相等判斷 / 類型判斷


相等判斷

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只能用於判斷基本類型(即非引用類型  BooleanFunctionNumberString, 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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM