简体   繁体   中英

Can I use `obj.constructor === Array` to test if object is Array?

Is it correct to use obj.constructor === Array to test if an object is an array as suggested here ? Does it always returns correct answer compatible with Array.isArray ?

Depends, there are a few scenarios where it can return a different value, but Array.isArray will work.

The Array object for one window is not the the same Array object in another window.

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

The constructor property can be overwritten.

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

Another object can also set the constructor property to Array .

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM