To check if an element is an array in JavaScript, I have always used Crockford's function (pg 61 of The Good Parts):
var is_array = function (value) {
return value &&
typeof value === 'object' &&
typeof value.length === 'number' &&
typeof value.splice === 'function' &&
!(value.propertyIsEnumerable('length'));
}
But if I'm not mistaken, recently some guy from Google had found a new way on how to test for a JavaScript array, but I just can't remember from where I read it and how the function went.
Can anyone point me to his solution please?
[Update]
The person from Google who apparently discovered this is called Mark Miller.
Now I've also read that from this post that his solution can easily break as well:
// native prototype overloaded, some js libraries extends them
Object.prototype.toString= function(){
return '[object Array]';
}
function isArray ( obj ) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
var a = {};
alert(isArray(a)); // returns true, expecting false;
So, I ask, is there any way that we can truly check for array validity?
I believe you are looking for
Object.prototype.toString.call(value) === "[object Array]";
This is the method that jQuery uses to check whether a passed parameter value is a function or array object. There are browser specific instances where using typeof
does not yield the correct result
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With