Hoe controleer je of een variabele een array is in JavaScript?

Ik wil controleren of een variabele een array of een enkele waarde is in JavaScript.

Ik heb een mogelijke oplossing gevonden...

if (variable.constructor == Array)...

Is dit de beste manier om dit te doen?

Je zou ook kunnen gebruiken:

if (value instanceof Array) {
  alert('value is Array!');
} else {
  alert('Not an array');
}

Dit lijkt me een vrij elegante oplossing, maar ieder zijn ding.

Bewerken:

Vanaf ES5 is er nu ook:

Array.isArray(value);

Maar dit zal breken op oudere browsers, tenzij je polyfills gebruikt (in principe... IE8 of vergelijkbaar).

Commentaren (13)

Er zijn meerdere oplossingen met elk hun eigen eigenaardigheden. Deze pagina geeft een goed overzicht. Een mogelijke oplossing is:

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}
Commentaren (4)

Via Crockford:

function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (value instanceof Array) {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

De belangrijkste tekortkoming die Crockford noemt is het onvermogen om arrays die in een andere context zijn aangemaakt, bijv. window, correct te bepalen.

Die pagina heeft een veel meer verfijnde versie als dit onvoldoende is.

Commentaren (0)