Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Distinguish between array and hash in javascript with typeof() [duplicate]

Tags:

javascript

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 (indicating it would be an array), but what then the following would also be seen as an array:

{length:5}
like image 798
mydoghasworms Avatar asked Jul 27 '11 13:07

mydoghasworms


2 Answers

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:

  1. If Type(arg) is not Object, return false.
  2. If the value of the [[Class]] internal property of arg is "Array", then return true.
  3. Return false.
like image 179
user113716 Avatar answered Nov 16 '22 10:11

user113716


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]
like image 36
jAndy Avatar answered Nov 16 '22 10:11

jAndy