Me gustaría comprobar si una variable es un array o un valor único en JavaScript.
He encontrado una posible solución...
if (variable.constructor == Array)...
¿Es esta la mejor manera de hacerlo?
También puedes usar:
if (value instanceof Array) {
alert('value is Array!');
} else {
alert('Not an array');
}
Esto me parece una solución bastante elegante, pero a cada uno lo suyo.
Editar:
A partir de ES5 ahora también hay:
Array.isArray(value);
Pero esto se romperá en los navegadores más antiguos, a menos que esté utilizando polyfills (básicamente... IE8 o similar).
Existen múltiples soluciones con sus propias peculiaridades. Esta página ofrece un buen resumen. Una posible solución es:
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
Vía Crockford:
function typeOf(value) {
var s = typeof value;
if (s === 'object') {
if (value) {
if (value instanceof Array) {
s = 'array';
}
} else {
s = 'null';
}
}
return s;
}
El principal fallo que menciona Crockford es la incapacidad de determinar correctamente las matrices que fueron creadas en un contexto diferente, por ejemplo, window
.
Esa página tiene una versión mucho más sofisticada si esto es insuficiente.