In modern browsers (and some legacy browsers), you can do
Array.isArray(obj)
(Supported by Chrome 5, Firefox 4.0, IE 9, Opera 10.5 and Safari 5)
If you need to support older versions of IE, you can use es5-shim to polyfill Array.isArray; or 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 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
Note: the arguments
keyword that can be used to access the argument of a function isn't an Array, even though it (usually) behaves like one:
var func = function() {
console.log(arguments) // [1, 2, 3]
console.log(arguments.length) // 3
console.log(Array.isArray(arguments)) // false !!!
console.log(arguments.slice) // undefined (Array.prototype methods not available)
console.log([3,4,5].slice) // function slice() { [native code] }
}
func(1, 2, 3)
if ('push' in variable.__proto__)
, the quickest and maybe best way to check if some var is array. – thednp Jul 5 '15 at 22:02