Eu gostaria de verificar se uma variável é um array ou um único valor em JavaScript.
Eu encontrei uma possível solução...
if (variable.constructor == Array)...
Esta é a melhor maneira de fazer isto?
Você também poderia usar:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
Esta parece-me uma solução bastante elegante, mas para cada um a sua.
Editar:
A partir do ES5, agora também existe:
Array.isArray(value);
Mas isto vai quebrar em navegadores mais antigos, a menos que você esteja usando polifílulas (basicamente... IE8 ou similares).
Existem múltiplas soluções com todas as suas próprias peculiaridades. Esta página dá uma boa visão geral. Uma solução possível é:
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;
}
A principal falha mencionada por Crockford é a incapacidade de determinar corretamente as matrizes que foram criadas em um contexto diferente, por exemplo, "janela".
Essa página tem uma versão muito mais sofisticada se esta for insuficiente.