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

arrays, javascript, prototype, types

Solution

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

Problem

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`?

Original source

Related problems