javascript - How can I check if an object is an array?

ID : 169

viewed : 60

Tags : javascriptarraysjavascript-objectsjavascript

Top 5 Answer for javascript - How can I check if an object is an array?

vote vote

96

The method given in the ECMAScript standard to find the class of Object is to use the toString method from Object.prototype.

if(Object.prototype.toString.call(someVar) === '[object Array]') {     alert('Array!'); } 

Or you could use typeof to test if it is a string:

if(typeof someVar === 'string') {     someVar = [someVar]; } 

Or if you're not concerned about performance, you could just do a concat to a new empty Array.

someVar = [].concat(someVar); 

There's also the constructor which you can query directly:

if (somevar.constructor.name == "Array") {     // do something } 

Check out a thorough treatment from T.J. Crowder's blog, as posted in his comment below.

Check out this benchmark to get an idea which method performs better: http://jsben.ch/#/QgYAV

From @Bharath, convert a string to an array using ES6 for the question asked:

const convertStringToArray = (object) => {    return (typeof object === 'string') ? Array(object) : object } 

Suppose:

let m = 'bla' let n = ['bla','Meow'] let y = convertStringToArray(m) let z = convertStringToArray(n) console.log('check y: '+JSON.stringify(y)) . // check y: ['bla'] console.log('check y: '+JSON.stringify(z)) . // check y: ['bla','Meow'] 
vote vote

88

In modern browsers you can do:

Array.isArray(obj) 

(Supported by Chrome 5, Firefox 4.0, Internet Explorer 9, Opera 10.5 and Safari 5)

For backward compatibility you can add the following:

// Only implement if no native implementation is available if (typeof Array.isArray === 'undefined') {   Array.isArray = function(obj) {     return Object.prototype.toString.call(obj) === '[object Array]';   } }; 

If you use jQuery you can use jQuery.isArray(obj) or $.isArray(obj). If you use Underscore.js you can use _.isArray(obj).

If you don't need to detect arrays created in different frames you can also just use instanceof:

obj instanceof Array 
vote vote

76

I would first check if your implementation supports isArray:

if (Array.isArray)     return Array.isArray(v); 

You could also try using the instanceof operator

v instanceof Array 
vote vote

68

jQuery also offers an $.isArray() method:

var a = ["A", "AA", "AAA"];    if($.isArray(a)) {    alert("a is an array!");  } else {    alert("a is not an array!");  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

vote vote

59

This is the fastest among all methods (all browsers supported):

function isArray(obj){     return !!obj && obj.constructor === Array; } 

Top 3 video Explaining javascript - How can I check if an object is an array?

Related QUESTION?