2012-10-21 41 views
78

thể trùng lặp:
JavaScript: Check if object is array?Tại sao mảng typeof với đối tượng trả về "Đối tượng" chứ không phải "Mảng"?

Tại sao một mảng của các đối tượng được coi là một đối tượng, và không phải là một mảng? Ví dụ:

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

Đó là cách 'typeof' là xác định, nhưng bạn có thể sử dụng 'Array.isArray'. – pimvdb

Trả lời

143

Một trong những hành vi kỳ lạ và đặc tả trong Javascript là typeof Mảng là Object.

Bạn có thể kiểm tra xem biến là một mảng trong vài cách sau:

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

Nhưng cách đáng tin cậy nhất là:

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

Vì bạn gắn thẻ câu hỏi của bạn với jQuery, bạn có thể sử dụng Hàm jQuery isArray:

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

Vì vậy, nói cách khác, 'typeof' không bao giờ có thể trả về" Array "? – Johan

+6

"Nhưng cách đáng tin cậy nhất là: ..." Vì vậy, những cách khác bạn đề nghị là không đáng tin cậy? – Alex

+9

@ Alex, vâng, người kia có thể cung cấp cho bạn 'false' nếu bạn đang kiểm tra một mảng mà bạn nhận được từ một'