Distinguish between array and hash in javascript with typeof() [duplicate]
Possible Duplicate:
In javascript how can we identify whether an object is a Hash or an Array?
In javascript
typeof([])
and
typeof({})
both return "object".
How can I reliably distinguish between an array and an associative array in Javascript?
I have thought of testing the object in question to see if it has the "length" attribute (indi开发者_如何学Gocating it would be an array), but what then the following would also be seen as an array:
{length:5}
Modern browsers have Array.isArray
built in.
For older browsers, you can test for that function and add it when necessary.
if( typeof Array.isArray !== 'function' ) {
Array.isArray = function( arr ) {
return Object.prototype.toString.call( arr ) === '[object Array]';
};
}
alert( Array.isArray( [] ) );
EDIT:
Array.isArray
is part of ECMAScript 5:
15.4.3.2 Array.isArray ( arg )
The isArray function takes one argument arg, and returns the Boolean value true if the argument is an object whose class internal property is "Array"; otherwise it returns false. The following steps are taken:
- If Type(arg) is not Object, return false.
- If the value of the [[Class]] internal property of arg is "Array", then return true.
- Return false.
A good idea is, to check for the internal [[CClass]]
value. To do that, you need to invoke Object.prototype.toString
:
var toStr = Object.prototype.toString;
toStr.call([]); // === [object Array]
toStr.call({}); // === [object Object]
Associative arrays do not exist in Javascript.
An array can only have numeric keys. If you access a string key, you are in fact using a shortcut, which is exactly equivalent to the object notation.
http://www.quirksmode.org/js/associative.html
http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/
精彩评论