2012-10-21 30 views
78

संभव डुप्लिकेट:
JavaScript: Check if object is array?ऑब्जेक्ट्स के साथ टाइपऑफ सरणी क्यों "ऑब्जेक्ट" लौटाती है और "ऐरे" नहीं देती है?

क्यों वस्तुओं की एक सरणी एक वस्तु माना जाता है, और नहीं एक सरणी? उदाहरण के लिए:

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

कैसे 'typeof' है कि तरह नहीं है परिभाषित किया गया है, लेकिन आप 'Array.isArray' का उपयोग कर सकते हैं। – pimvdb

उत्तर

143

अजीब व्यवहार और जावास्क्रिप्ट में कल्पना में से एक typeof सरणी Object है।

आप देख सकते हैं चर तरीकों की जोड़ी में एक सरणी है:

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

लेकिन सबसे विश्वसनीय तरीका है:

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

आप jQuery के साथ अपने प्रश्न में चिह्नित के बाद से, आप उपयोग कर सकते हैं jQuery isArray फ़ंक्शन:

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

तो दूसरे शब्दों में, 'टाइपोफ' कभी भी "ऐरे" वापस नहीं लौटा सकता है? – Johan

+6

"लेकिन सबसे विश्वसनीय तरीका है: ..." तो आपके द्वारा सुझाए गए अन्य तरीकों अविश्वसनीय हैं? – Alex

+9

@Alex, हां, दूसरा आपको 'झूठा' दे सकता है यदि आप एक '