Vorrei controllare se una variabile è un array o un valore singolo in JavaScript.
Ho trovato una possibile soluzione...
if (variable.constructor == Array)...
È questo il modo migliore per farlo?
Si potrebbe anche usare:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
Questa mi sembra una soluzione abbastanza elegante, ma a ciascuno il suo.
Modifica:
A partire da ES5 ora c'è anche:
Array.isArray(value);
Ma questo si romperà sui vecchi browser, a meno che tu non stia usando i polyfill (in pratica... IE8 o simili).
Ci sono più soluzioni con tutte le loro stranezze. Questa pagina offre una buona panoramica. Una possibile soluzione è:
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;
}
Il principale difetto che Crockford menziona è l'incapacità di determinare correttamente gli array che sono stati creati in un contesto diverso, per esempio, window
.
Quella pagina ha una versione molto più sofisticata se questo è insufficiente.