Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 239
Ali Shakiba Avatar asked Feb 11 '23 22:02

Ali Shakiba


1 Answers

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
like image 59
Alexander O'Mara Avatar answered Feb 13 '23 15:02

Alexander O'Mara