2012-10-21 9 views
78

Eventuali duplicati:
JavaScript: Check if object is array?Perché il tipo di matrice con oggetti restituisce "Oggetto" e non "Matrice"?

Perché è un array di oggetti considerato un oggetto, e non un array? Per esempio:

$.ajax({ 
    url: 'http://api.twitter.com/1/statuses/user_timeline.json', 
    data: { screen_name: 'mick__romney'}, 
    dataType: 'jsonp', 
    success: function(data) { 
     console.dir(data); //Array[20] 
     alert(typeof data); //Object 
    } 
});​ 

Fiddle

+0

Ecco come 'typeof' è definito, ma puoi usare 'Array.isArray'. – pimvdb

risposta

143

Uno del comportamento strano e spec in Javascript è l'Array typeof è Object.

È possibile verificare se la variabile è un array in due modi:

var isArr = data instanceof Array; 
var isArr = Array.isArray(data); 

Ma il modo più affidabile è:

isArr = Object.prototype.toString.call(data) == '[object Array]'; 

Dal momento che hai contrassegnato la tua domanda con jQuery, è possibile utilizzare jQuery funzione isArray:

var isArr = $.isArray(data); 
+4

Quindi, in altre parole, 'typeof' non può mai restituire" Array "? – Johan

+6

"Ma il modo più affidabile è: ..." Quindi gli altri modi che hai suggerito sono inaffidabili? – Alex

+9

@Alex, sì, l'altro può darti 'false' se stai controllando un array ottenuto da un'