可能重複:
How to detect if a variable is an array最好的方式,如果一個變量是一個數組
當我需要測試,如果變量是一個函數的陣列(例如輸入的論點,即可能是對象或數組)我通常使用這段代碼
typeof(myVar) === 'object' && myVar.length !== undefined;
這是正確的方法或有沒有更高效的方法,考慮到即使myVar instanceof Array
is faster應該避免由於iframe
問題?
可能重複:
How to detect if a variable is an array最好的方式,如果一個變量是一個數組
當我需要測試,如果變量是一個函數的陣列(例如輸入的論點,即可能是對象或數組)我通常使用這段代碼
typeof(myVar) === 'object' && myVar.length !== undefined;
這是正確的方法或有沒有更高效的方法,考慮到即使myVar instanceof Array
is faster應該避免由於iframe
問題?
Array.isArray
現可ECMAScript 5,所以你可以使用它polyfill爲older browsers:
if(!Array.isArray) {
Array.isArray = function (vArg) {
return Object.prototype.toString.call(vArg) === "[object Array]";
};
}
Array.isArray(myVar);
對於polyfill :) – 2012-07-23 23:06:40
「iframe問題」可以避免簡單地通過不使用相同的名稱爲一個框架和一個數組,在我看來,不難做到,也就是說,我從來沒有必要斷言是否。不是一個數組...
「iframe問題」是,在iframe中創建的數組只是其創建的iframe的Array構造函數的實例,因此如果在幀之間傳遞它,則instanceof「失敗」。 – Neil 2012-07-23 23:22:47
如果您已經在你的代碼中使用jQuery,您可以使用jQuery.isArray()下面是文檔:
可以嘗試 - Object.prototype.toString.call
一個例子 -
var a = [1,2]
console.log(Object.prototype.toString.call(a))
這返回[對象陣列]
可以與串切片方法在下列方式
被檢查
console.log(Object.prototype.toString.call(a).slice(8,-1)) <br />
返回「Array」
var a = [1,2]
console.log(Object.prototype.toString.call(a).slice(8,-1) == "Array") // true
或者爲了更少的開銷,你可以將它與完整的字符串進行比較:''[object Array]'(如下所示) – bokonic 2012-07-23 23:00:57
我想喬納森已經回答了這個問題,我必須說更好方式:) – 2012-07-23 23:04:32
是的,你是對的Bokonic。我完全同意你的看法。 – 2012-07-23 23:05:47
http://stackoverflow.com/questions/767486/how-do-you-check-if-a-variable-is-an-array-in-javascript – Anders 2012-07-23 22:51:35
zepto.js(有很好的源代碼)使用instanceof:'function isArray(value){返回值instanceof Array}'[src](https://github.com/madrobby/zepto/blob/master/src/zepto.js) – bokonic 2012-07-23 22:52:01
@bokonic:可能的重複清楚地表明,如果由於每個幀具有其自己的Array對象而跨越幀邊界傳遞該對象,則這將失敗。 – 2012-07-24 19:43:33