2013-04-26 14 views
13

Come sapere se un oggetto è array o no?Identificazione dell'oggetto array

var x=[]; 

console.log(typeof x);//output:"object" 
alert(x);//output:[object Object] 
console.log(x.valueOf())//output:<blank>? what is the reason here? 
console.log([].toString()); also outputs <blank>  
Object.prototype.toString.call(x) output:[object Array] how? 

dal console.log ([]. ToString()); uscite: vuoto

1 °:

perché ottengo vuota alla seconda ultima affermazione?

2 °:

C'è un modo per sapere esattamente che cosa un oggetto è: Array o Object pianura ({}) senza l'aiuto dei rispettivi metodi come x.join() indica x è un array non in questo modo

In realtà, nella selezione jQuery come $ ("p") restituisce oggetto jQuery, quindi se io uso

console.log(typeof $("p"));//output:"object 

Volevo solo sapere il nome effettivo del Object.Thats u it.thank per aiutare u

+0

Date un'occhiata a questa altra domanda http://stackoverflow.com/questions/767486/how-do-you-check-if- a-variable-is-an-array-in-javascript – acj

risposta

8

in puro JavaScript è possibile utilizzare il seguente approccio cross browser:

if (Object.prototype.toString.call(x) === "[object Array]") { 
    // is plain array 
} 

jQuery ha special method per questo:

if ($.isArray(x)) { 
    // is plain array 
} 
+0

console.log ([]. valueOf()) // output: ? qual è la ragione qui? –

+0

@Maizere Fondamentalmente '[] .valueOf()' restituisce '[]', e non ha alcun senso qui. – VisioN

+0

grazie, ha aiutato –

1

Semplice:

if(Object.prototype.toString.call(someVar) === '[object Array]') { 
    alert('Array!'); 
} 
2

migliore pratica è l'invocazione di Object.prototype.toString() sull'oggetto di destinazione, che visualizza il nome [[Class]] proprietà interna.

Object.prototype.toString.call(x); // [object Array] 

questo ha l'adventage, che funziona su ogni e qualsiasi oggetto, a prescindere se si sta lavorando in un multi telaio/finestra ambiente, che causa problemi sull'uso x instanceof Array.


implementazioni ES5 più recenti, anche darvi il metodo Arrays.isArray(), che restituisce true o false.

Array.isArray(x); // true 

E, ultimo ma non meno importante, jQuery, dispone di una .isArray() metodo, che restituisce anche un valore booleano

jQuery.isArray(x); // true 
0

Penso che tu sia alla ricerca di qualcosa di simile:

if(Object.prototype.toString.call(someVar) === '[object Array]') { 
    alert('Array!'); 
} 

Spero che questo aiuti.Un po 'lento: P

+1

Sì, questo è già stato pubblicato due o tre volte. –

3

È possibile utilizzare instanceof. Ecco alcuni test FireBug:

test1 = new Object(); 
 
test2 = new Array(); 
 
test3 = 123; 
 

 
console.log(test1 instanceof Array); //false 
 
console.log(test2 instanceof Array); //true 
 
console.log(test3 instanceof Array); //false

+1

Forse il downvoter sarebbe abbastanza gentile da spiegare perché il -1, per motivi di apprendimento :) – LeonardChallis

+1

Non ero io (francamente non penso che questo sia abbastanza sbagliato da meritare un downvote), ma questo fallisce in multi- Ambienti DOM come iframe e simili. Vedi [questo articolo] (http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/) per ulteriori informazioni. –

+0

fantastico - grazie :) – LeonardChallis

Problemi correlati