Jeg vil gerne kontrollere, om en variabel er enten et array eller en enkelt værdi i JavaScript.
Jeg har fundet en mulig løsning...
if (variable.constructor == Array)...
Er dette den bedste måde dette kan gøres på?
Du kan også bruge:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
Det synes jeg er en ret elegant løsning, men det er jo hver sin smag.
Rediger:
Fra og med ES5 er der nu også:
Array.isArray(value);
Men dette vil gå i stykker på ældre browsere, medmindre du bruger polyfills (dybest set... IE8 eller lignende).
Der findes flere løsninger med hver deres særheder. Denne side giver et godt overblik. En mulig løsning er:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
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;
}
Den vigtigste fejl, som Crockford nævner, er en manglende evne til korrekt at bestemme arrays, der blev oprettet i en anden kontekst, f.eks. window
.
Denne side har en meget mere sofistikeret version, hvis dette ikke er tilstrækkeligt.