javascript如何判斷一個物件的型別

admin發表於2017-03-15

在實際應用中,可能需要確切的知道一個物件是屬於何種型別,比如是字串型別還是輸時間型別,下面本章節就通過例項程式碼進行一下簡單介紹,希望能夠對需要的朋友帶來一定的幫助。

一.typeof 運算子:

使用此運算子可以返回一個字串用語說明物件的型別,例如:

[JavaScript] 純文字檢視 複製程式碼
var str="I love antzone";
console.log(typeof(str));

以上程式碼的可以輸出"string"。

此運算子的返回值可以是"number","string","boolean","object","function","undefined"。

但是此運算子並不夠精準,對於Date、RegExp和Array物件的返回值都是object,例如:

[JavaScript] 純文字檢視 複製程式碼
var theArray=[1,2,3];
var theReg=/ab/;
var theDate=new Date();
console.log(typeof(theArray));
console.log(typeof(theReg));
console.log(typeof(theDate));

二.instanceof運算子:

此運算子可以檢測一個物件是否是指定的類的物件例項,如果是則返回true,否則返回false,例如:

[JavaScript] 純文字檢視 複製程式碼
var theArray=[1,2,3]; 
var theReg=/ab/; 
var theDate=new Date(); 
console.log(theArray instanceof Array); 
console.log(theReg instanceof RegExp); 
console.log(theDate instanceof Date);

更多instanceof運算子相關內容可以參閱javascript instanceof 運算子一章節。

三.constructor屬性:

在javascript中,每一個物件都具有constructor屬性,它指向初始化該物件的建構函式(就是類),用常用來判斷物件的型別。使用typeof運算子來判斷一個物件的型別往往不夠準確,此運算子能夠判斷原始型別的物件的型別,但是對於引用型別的就不能夠準確判斷了,例如:

[JavaScript] 純文字檢視 複製程式碼
var numOne=new Number(1); 
var numTwo=2; 
console.log(typeof(numOne));
console.log(typeof(numTwo));

上面的程式碼第一個輸出是"object",第二個輸出是"number"。

於是可以和constructor屬性配合使用,例如判斷一個物件是否是陣列可以以如下方式:

[JavaScript] 純文字檢視 複製程式碼
function isArray(arr){ 
  return typeof arr=="object"&&arr.constructor==Array; 
} 
var theArray=[1,2,3];
console.log(isArray(theArray));

相關文章