2012-07-23 39 views
1

可能重複:
How to detect if a variable is an array最好的方式,如果一個變量是一個數組

當我需要測試,如果變量是一個函數的陣列(例如輸入的論點,即可能是對象或數組)我通常使用這段代碼

typeof(myVar) === 'object' && myVar.length !== undefined; 

這是正確的方法或有沒有更高效的方法,考慮到即使myVar instanceof Arrayis faster應該避免由於iframe問題?

+0

http://stackoverflow.com/questions/767486/how-do-you-check-if-a-variable-is-an-array-in-javascript – Anders 2012-07-23 22:51:35

+0

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

+0

@bokonic:可能的重複清楚地表明,如果由於每個幀具有其自己的Array對象而跨越幀邊界傳遞該對象,則這將失敗。 – 2012-07-24 19:43:33

回答

5

Array.isArray現可ECMAScript 5,所以你可以使用它polyfillolder browsers

if(!Array.isArray) { 
    Array.isArray = function (vArg) { 
    return Object.prototype.toString.call(vArg) === "[object Array]"; 
    }; 
} 

Array.isArray(myVar); 
+0

對於polyfill :) – 2012-07-23 23:06:40

0

「iframe問題」可以避免簡單地通過不使用相同的名稱爲一個框架和一個數組,在我看來,不難做到,也就是說,我從來沒有必要斷言是否。不是一個數組...

+1

「iframe問題」是,在iframe中創建的數組只是其創建的iframe的Array構造函數的實例,因此如果在幀之間傳遞它,則instanceof「失敗」。 – Neil 2012-07-23 23:22:47

0

可以嘗試 - 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 
+0

或者爲了更少的開銷,你可以將它與完整的字符串進行比較:''[object Array]'(如下所示) – bokonic 2012-07-23 23:00:57

+0

我想喬納森已經回答了這個問題,我必須說更好方式:) – 2012-07-23 23:04:32

+0

是的,你是對的Bokonic。我完全同意你的看法。 – 2012-07-23 23:05:47

相關問題