¿Cómo se comprueba si una variable es un array en JavaScript?

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).

Comentarios (13)

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]'; 
}
Comentarios (4)

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.

Comentarios (0)