jQuery जो बनाता है (ईएस मानक में) सरणी जैसी वस्तुओं को बनाता है। विशेष रूप से, उनके पास एक लंबी संपत्ति होती है, और यह भी (जो लंबाई संपत्ति का उपयोग करती है) उनके पास पूर्णांक-आधारित सूचकांक के तहत प्रासंगिक आइटम होते हैं।
:
var arrayLike = {length: 3, 0:'first', 1:'second', 2:'third'};
Array.prototype.join.call(arrayLike, '|'); // "first|second|third"
आप the standard (15.4.4) पर एक नज़र डालें, तो विशेष रूप से Array.prototype
तरीकों आप निम्नलिखित टिप्पणी प्रत्येक और हर एक के अंतर्गत दिखाई देंगे:
यह रूप में सरल है
नोट * कार्य जानबूझकर सामान्य है; इसे की आवश्यकता नहीं है, यह मान एक ऐरे ऑब्जेक्ट है। इसलिए इसे विधि के रूप में उपयोग के लिए अन्य प्रकार की वस्तुओं में स्थानांतरित किया जा सकता है। चाहे * कार्य किसी मेजबान ऑब्जेक्ट को सफलतापूर्वक लागू किया जा सकता है कार्यान्वयन-निर्भर है।
आप इन एल्गोरिदम के विवरण को देखें, तो वे काफी सिर्फ लंबाई संपत्ति वस्तु पर पुनरावृति करने के लिए (हमारे मामले एक सरणी की तरह वस्तु में) का उपयोग करें और उन पूर्णांक आधारित पीछे मानों तक पहुंच चांबियाँ। इसी कारण से वे सामान्य हैं और प्रासंगिक गुणों के साथ नियमित जेएस वस्तुओं पर काम करते हैं।
अनिवार्य रूप से यह सभी jQuery करता है (अगर मुझे सही ढंग से याद है कि इमारत झींगा, jquery के सीएसएस चयनकर्ता इंजन में किया जाता है)। आप इसका परीक्षण कर सकते हैं/इसे विभिन्न तरीकों से साबित कर सकते हैं। उदाहरण के लिए, एक मानक js सरणी कुछ जादू जब लंबाई संपत्ति छोटा है करता है, लेकिन jQuery वस्तु नहीं करता है:
var arr = [1,2,3], $arr = $('div'); // assuming three divs
arr.length=2; arr[2]; // undefined
$arr.length=2; $arr[2]; // still references the div
http://jsfiddle.net/cnkB9/
तो jQuery के makeArray
jQuery सरणी जैसी वस्तु बदल देता है, और बनाता है यह एक वास्तविक देशी जेएस सरणी में है, लेकिन जैसा कि आपने कहा था, तो इसमें संलग्न सभी jquery विधियां नहीं हैं। What makes Firebug/Chrome console treat a custom object as an array? बताते हैं कि कि length
संपत्ति की उपस्थिति और splice
समारोह उस में सबसे शान्ति एक सरणी की तरह प्रकट करने के लिए अनुमति देते हैं:
कारण है कि यह सांत्वना में दिखाई देता है का सवाल है, मैं इस उत्कृष्ट जवाब को देखें। जैसा कि बताया गया है, यह एफएफ 4 के वेब कंसोल में मामला नहीं है, जो आपको दिखाता है कि यह मूल जेएस सरणी नहीं है। दिलचस्प बात यह है कि splice
फ़ंक्शन को वास्तव में काम नहीं करना है, बस उपस्थित रहें, और एक फ़ंक्शन बनें।उदाहरण के लिए:
>> console.log({length:2,0:'some',1:'thing',splice:new Function});
["some", "thing"]
यह माना जाता है कि कैसे 'नोडलिस्ट' सरणी की तरह काम करता है लेकिन नहीं है। – BoltClock
क्या ऐरे-ऑब्जेक्ट्स? आप कैसे जानते हैं कि यह एक सरणी लॉग करता है, न कि ऑब्जेक्ट? –