2009-07-29 12 views

Respuesta

16

puedo utilizar esta función:

function isArray(obj) { 
    return Object.prototype.toString.call(obj) === '[object Array]'; 
} 

es la forma en que se implementa jQuery.isArray.

Comprobar este artículo:

+0

¡Perfecto! Estoy usando jQuery así que solo usaré eso. El artículo ayudó también. – Artilheiro

+0

en los navegadores modernos tenemos la función Array.isArray, así que mejor escriba smth como si! Array.isArray {... aquí va la definición ...} – shabunc

3
if(foo(1) instanceof Array) 
    // You have an Array 
else 
    // You don't 

Actualización: tengo que responder a las observaciones formuladas a continuación, porque la gente todavía se quejan de que esto no funcionará sin tratar por sí mismos ...

Para algunos otros objetos de esta técnica no funciona (por ejemplo, "" instanceof String == false), pero esto funciona para Array. Lo probé en IE6, IE8, FF, Chrome y Safari. Pruébalo y compruébalo tú mismo antes de comentar a continuación.

+1

ver https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/instanceof_Operator – VolkerK

+5

Eso * solo * funcionará, si declara una matriz a través de 'new Array()', no con '[] 'taquigrafía. Vea la sección 'Descripción' debajo de la URL anterior. – Boldewyn

+0

una publicación detallada sobre el uso de este método: http://thinkweb2.com/projects/prototype/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/ – CMS

-1

Para que su solución más general, no pueden cuidar de si en realidad es un objeto Array. Por ejemplo, document.getElementsByName() devuelve un objeto que "actúa como" una matriz. Se puede asumir "cumplimiento de matriz" si el objeto tiene una propiedad de "longitud".

function is_array_compliant(obj){ 
    return obj && typeof obj.length != 'undefined'; 
} 
+0

Las cadenas también tienen una propiedad de "longitud". –

+0

Eso es verdad. Por lo tanto, también debe verificar que: typeof obj == "object" – dankuck

2

Esta es una manera muy fiable, tomar de Javascript: las partes buenas, publicado por O'Reilly:

if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' && 
!(my_value.propertyIsEnumerable('length')) { // my_value is truly an array! } 

sugeriría envolviéndolo en su propia función:

function isarray(my_value) { 

    if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' && 
     !(my_value.propertyIsEnumerable('length')) 
     { return true; } 
    else { return false; } 
} 
+0

Simplemente podría 'devolver' el resultado de la expresión en lugar de' if..else'. :PAG –

Cuestiones relacionadas