2015-02-12 42 views
3

使用obj.constructor === Array來測試對象是否爲建議的陣列here是否正確?它是否始終返回與Array.isArray兼容的正確答案?我可以使用`obj.constructor ===數組`來測試對象是數組嗎?

+0

您也可以使用來自「obj instanceof Array」的布爾返回值,但是與您的版本一樣,它只對同一個窗口範圍的數組返回true。 – kennebec 2015-02-12 01:03:52

+0

你有沒有讀過關於這個問題的其他答案? http://blog.niftysnippets.org/2010/09/say-what.html – Bergi 2015-04-01 20:08:27

+0

@Bergi是的,當我問這個問題時,我有興趣瞭解更多關於'obj.constructor === Class'的知識。 – 2015-04-01 20:14:27

回答

5

取決於,有幾種情況下它可以返回不同的值,但Array.isArray將工作。

Array一個窗口的對象與另一個窗口中的對象不是相同的Array

var obj = someIframe.contentWindow.someArray; 
console.log(obj.constructor === Array);//false 
console.log(Array.isArray(obj));//true 

constructor屬性可以被覆蓋。

var obj = []; 
obj.constructor = null; 
console.log(obj.constructor === Array);//false 
console.log(Array.isArray(obj));//true 

另一個目的還可以將constructor屬性設置爲Array

var obj = {}; 
obj.constructor = Array; 
console.log(obj.constructor === Array);//true 
console.log(Array.isArray(obj));//false 
+1

另請參見:var arr = []; arr .__ proto__ = Object.create(Array.prototype,{constructor:{value:MyArraySubclass}});' – Bergi 2015-04-01 20:10:34

相關問題