1,constructor方法
if(my_value&& typeof my_value==="object" && my_value.constructor === Array){
//my_valule是一個數組
}
function isArray(object){
return object && typeof object==='object' &&
Array === object.constructor;
}
var a=[];
console.log(a instanceof Array) //傳回true
上面的檢測如果是iframe裡面,在同幀或者寬口建立的數組将會給出false。
使用instaceof和construcor,被判斷的array必須是在目前頁面聲明的!比如,一個頁面(父頁面)有一個架構,架構中引用了一個頁面(子頁面),在子頁面中聲明了一個array,并将其指派給父頁面的一個變量,這時判斷該變量,Array == object.constructor;會傳回false;
原因:
1、array屬于引用型資料,在傳遞過程中,僅僅是引用位址的傳遞。
2、每個頁面的Array原生對象所引用的位址是不一樣的,在子頁面聲明的array,所對應的構造函數,是子頁面的Array對象;父頁面來進行判斷,使用的Array并不等于子頁面的Array;切記,不然很難跟蹤問題!
在js語言精粹中的方法,如下圖,可以忽略上面的問題
if(my_value&&typeof my_value==="object"&&typeof my_value.length ==='number'&& !(my_value.propertyIsEnumerable('length')){
}
有length和splice并不一定是數組,因為可以為對象添加屬性,而不能枚舉length屬性,才是最重要的判斷因子。
function isArray(object){
return object && typeof object==='object' &&
typeof object.length==='number' &&
typeof object.splice==='function' &&
//判斷length屬性是否是可枚舉的 對于數組 将得到false
function isArray(o) {
return Object.prototype.toString.call(o) === ‘[object Array]‘;
}
有沒有好的方法,快速的将object轉成array?