2015-02-12 41 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

相关问题