2009-07-29 16 views

risposta

16

Io uso questa funzione:

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

è il modo che jQuery.isArray è implementato.

Controllare questo articolo:

+0

Perfetto! Sto usando jQuery quindi lo userò. Anche l'articolo ha aiutato. – Artilheiro

+0

nei moderni browser abbiamo la funzione Array.isArray, quindi meglio scrivere smth come se! Array.isArray {... ecco la definizione ...} – shabunc

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

Aggiornamento: devo rispondere ai commenti fatti qui di seguito, perché le persone stanno ancora sostenendo che questo non funzionerà senza cercare per se stessi ...

Per alcuni altri oggetti questa tecnica non funziona (ad esempio "" instanceof String == false), ma questo funziona per Array. L'ho provato in IE6, IE8, FF, Chrome e Safari. Provalo e vedi di persona prima di commentare qui sotto.

+1

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

+5

Che funzionerà * solo * se si dichiara un array tramite 'new Array()', non con '[] 'stenografia. Vedi la sezione 'Descrizione' sotto l'URL sopra. – Boldewyn

+0

un post dettagliato sull'utilizzo di questo metodo: http://thinkweb2.com/projects/prototype/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/ – CMS

-1

Per rendere la soluzione più generale, non possono preoccuparsi se si è in realtà un oggetto Array. Ad esempio, document.getElementsByName() restituisce un oggetto che "si comporta come" un array. "Array compliance" può essere assunto se l'oggetto ha una proprietà "length".

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

Le stringhe hanno anche una proprietà "length". –

+0

È vero. Quindi, dovresti anche controllare che: typeof obj == "oggetto" – dankuck

2

Ecco un modo molto affidabile, prendere da JavaScript: le parti buone, pubblicato da O'Reilly:

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

vorrei suggerire avvolgendolo in una propria funzione:

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

Si potrebbe semplicemente "restituire" il risultato dell'espressione invece di un "if..else". : P –

0

A partire da ES5 c'è isArray.

Array.isArray([]) // true 
Problemi correlati