2011-04-29 14 views
31

मैंने अभी इस बारे में सोचना शुरू कर दिया है, लेकिन jsFiddle में चारों ओर घूमते हुए खुद को बेनकाब करने के लिए कोई अंतर नहीं मिला।जावास्क्रिप्ट में ऐरे (1) और नया ऐरे (1) के बीच क्या अंतर है?

var a = new Array(1), 
    b = Array(1); 

console.log(a, b); 

आउटपुट एक अनिर्धारित सदस्य के साथ दो सरणी है।

for (in) करने से पता चलता है कि उनके पास समान गुण हैं।

इनके बीच क्या अंतर है? क्या पहला व्यक्ति वस्तु को तुरंत स्पष्ट करता है?

कृपया सरणी शाब्दिक नोटेशन का उपयोग करने के बारे में मुझे व्याख्यान न करें क्योंकि मुझे पहले से ही पता है। मैं ऊपर बताए गए अपने ज्ञान में इस अंतर को भरना चाहता हूं।

+1

[जेएस में नया कीवर्ड] (http://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript) –

+0

मैं उस पर जंगली स्टैब लेने जा रहा हूं और कहता हूं कि नए साधन यह है कि यह एक वस्तु है जैसा कि बिना किसी नए के है। नए वाले व्यक्ति के पास http://www.w3schools.com/jsref/jsref_obj_array.asp जैसा वर्णन किया गया है, जबकि कोई नया नहीं होगा। – Flipper

+0

@ फ़्लीपर I प्रत्येक के गुणों के माध्यम से पुनरावृत्त हुआ और दोनों में एक ही तरीके प्रतीत होते हैं। – alex

उत्तर

31

Array के साथ, दोनों समकक्ष हैं। new इंजेक्ट किया जाता है, जब यह एक समारोह के रूप में कहा जाता है:

15.4.1 Array निर्माता एक समारोह

Array एक समारोह के रूप के बजाय एक निर्माता के रूप में बुलाया है, यह बनाता है और initialises के रूप में कहा जाता है एक नया ऐरे ऑब्जेक्ट। इस प्रकार फ़ंक्शन कॉल Array(…) उसी तर्क के साथ ऑब्जेक्ट निर्माण अभिव्यक्ति new Array(…) के बराबर है।

ECMA-262, 3th Edition से (5th Edition में इसी तरह के साथ)।

4

अंतर ऐरे फ़ंक्शन के कार्यान्वयन में निहित है। चाहे नए ऑपरेटर के बिना ऐरे को कॉल किया जाए, ऐरे का एक उदाहरण लौटाएगा या नहीं, कार्यान्वयन निर्भर है। उदाहरण के लिए मोज़िला का स्पाइडरमोन्की इंजन यह करता है:

static JSBool 
Array(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) 
{ 
    jsuint length; 
    jsval *vector; 

    /* If called without new, replace obj with a new Array object. */ 

यह वास्तविक स्रोत से वास्तविक टिप्पणी है। कोड की अगली पंक्तियां यहां पुन: उत्पन्न नहीं की जाती हैं। मुझे लगता है कि अन्य इंजन भी वही करते हैं। अन्यथा व्यवहार अपरिभाषित है। इस विषय पर एक अच्छा पठन जॉन रेसिग का पोस्ट here है।

5

जावास्क्रिप्ट के अनुसार: यह निश्चित गाइड (5 वें संस्करण), पृष्ठ 602, "Array() निर्माता एक समारोह के रूप में कहा जाता है, new ऑपरेटर के बिना, यह वास्तव में व्यवहार करने के तरीके new ऑपरेटर के साथ कहा जाता है के रूप में यह करता है।"

संबंधित मुद्दे