JavaScript判斷陣列還是物件

antzone發表於2017-04-17

判斷一個變數的型別,一般使用typeof就可以實現,但是當檢測一個變數是Array和Object型別的時候就不好用了,因為無論是陣列還是Object物件返回值都是object,例如:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var theObject={webName:"螞蟻部落",address:"青島市南區"};
var theArray=["螞蟻部落","青島市南區"];
console.log(typeof theObject);//輸出object
console.log(typeof theArray);//輸出object

以上程式碼並不能夠檢測是陣列還是物件,所以還得想別的辦法。

一.通過length屬性判斷:

通常情況下陣列具有length屬性,而物件沒有,於是就可以通過此屬性判斷一個變數是陣列還是物件。

程式碼如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var theObject={webName:"螞蟻部落",address:"青島市南區"};
var theArray=["螞蟻部落","青島市南區"];
var whichType=function(bianliang){ 
  if(typeof bianliang=='object'){ 
    if(typeof bianliang.length=='number'){ 
      return "變數是陣列";  
    }
    else{ 
      return '變數是物件';     
    } 
  }
  else{ 
    return "你傳入了個什麼東西"; 
  } 
}; 
console.log(whichType(theObject));//變數是物件
console.log(whichType(theArray));//變數是陣列

以上程式碼可以判斷變數的型別,但是並不完善,因為object物件中完全可以自定義一個length屬性。所以程式碼還是有缺陷的,在某些情況下以上程式碼並不靈光。

二.使用instanceof方式:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var theObject={webName:"螞蟻部落",address:"青島市南區"};
var theArray=["螞蟻部落","青島市南區"];
console.log(theArray instanceof Array);//true
console.log(theObject instanceof Array);//false

以上程式碼可以判斷出兩者的型別,下面再看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var theObject={webName:"螞蟻部落",address:"青島市南區"};
var theArray=["螞蟻部落","青島市南區"];
console.log(theArray instanceof Object);//true
console.log(theObject instanceof Object);//true

因為陣列也屬於Object,所以都會返回true,所以我們檢測的時候要首先檢測陣列。

三.一個網路上常用的轉載方式:

[JavaScript] 純文字檢視 複製程式碼
function isArray(obj) {    
  return Object.prototype.toString.call(obj) === '[object Array]';     
}

這個方式比較簡略經典,建議使用。

相關文章