2012-07-30 15 views
5

संभव डुप्लिकेट:
Create an empty object in JavaScript with {} or new Object()?जावास्क्रिप्ट में सरणी घोषित करते समय पालन करने का सबसे अच्छा अभ्यास कौन सा है?

जब मैं एक नई सरणी मैं इस संकेतन का उपयोग घोषित करने के लिए चाहते हैं

var arr = new Array(); 

लेकिन जब jsbin पर ऑनलाइन परीक्षण, उदाहरण के लिए, एक चेतावनी मुझे "सरणी शाब्दिक नोटेशन [] का उपयोग करें।"

मुझे कन्स्ट्रक्टर का उपयोग करने से बचने का कोई कारण नहीं मिला। [] का उपयोग करने से कम तरीके से कम कुशल है? या यह बुरा अभ्यास है?

var arr = new Array(); के बजाय var arr = []; का उपयोग करने का कोई अच्छा कारण है?

उत्तर

5

अधिकतर लोग var a = [] का उपयोग करते हैं क्योंकि Douglas Crockford ऐसा कहता है।

उनके कारणों नई सरणी() के गैर सहज और असंगत व्यवहार में शामिल हैं:

var a = new Array(5);  // an array pre-sized to 5 elements long 
var b = new Array(5, 10); // an array with two elements in it 

नोट वहाँ new Array() साथ कोई रास्ता नहीं उस में सिर्फ एक पूर्व निर्धारित संख्या के तत्व के साथ एक सरणी बनाने के लिए है कि!

का उपयोग [] वास्तव में अधिक कुशल और सुरक्षित भी है! ऐरे कन्स्ट्रक्टर को ओवरराइट करना और इसे अजीब चीजें करना संभव है, लेकिन आप [] के व्यवहार को ओवरराइट नहीं कर सकते हैं।

व्यक्तिगत रूप से, मैं हमेशा [] वाक्यविन्यास का उपयोग करता हूं, और इसी तरह हमेशा नए ऑब्जेक्ट() के स्थान पर {} वाक्यविन्यास का उपयोग करता हूं।

+0

* किसी भी तरह से [...] के साथ कोई सरणी निर्दिष्ट संख्या तत्व के साथ एक सरणी बनाने के लिए आपका क्या मतलब है *? – KooiInc

+1

उसका मतलब है कि आप नए ऐरे (123) का उपयोग कर एक सरणी [123] नहीं बना सकते हैं क्योंकि यह दिए गए आकार की पूर्व परिभाषित सरणी बनाता है। –

0

सिफारिश अभ्यास

var arr = []; 

पहले से ही here

+2

आदमी ने स्पष्टीकरण के लिए कहा कि यह बेहतर क्यों है। –

7

[] जवाब है उपयोग करने के लिए है:

  • कम
  • स्पष्ट
  • अधीन नहीं new Array(3) औरके लिएपूरी तरह से अलग-अलग चीजें कर रहे हैं
  • ओवरराइड नहीं किया जा सकता है।

उदाहरण कोड:

var a = new Array(3); 
var b = new Array(3,3); 
Array = function() { return { length: "!" }; }; 
var c = new Array(); 
var d = []; 
alert(a.length); // 3 
alert(b.length); // 2 
alert(c.length); // ! 
alert(d.length);​ // (still) 0​​​​​​​​ 

इस कोड live - 4 अलर्ट बनाने की कोशिश करेंगे!

+0

अच्छा जवाब। बीटीडब्ल्यू, मुझे यह जानने के लिए समझाया गया है कि आप क्यों सोचते हैं कि नया ऐरे (3) और नया ऐरे (3,3) विरोधाभासी है? वे पूरी तरह से अलग प्रारंभिक प्रदर्शन करते हैं। –

+0

'[]' कई ब्राउज़रों पर भी [तेज़] (http://jsperf.com/literal-vs-constructor-array/4) है। –

+0

@ अश्विनप्रभा - कि वे पूरी तरह से अलग प्रारंभिकरण करते हैं मेरी बात है। यह रखरखाव करने वालों को यह जानने की आवश्यकता है कि दूसरा तर्क जोड़ने से पहले तर्क का अर्थ बदल जाता है। – Quentin

0

जावास्क्रिप्ट में, जब आप कर सकते हैं तो आपको शाब्दिक उपयोग करना चाहिए।

var a = []; बजाय var o = new Array();

बजाय var o = {};var o = new Object();

इसी

, new String("abc");, new Number(1);, और इतने पर नहीं करते हैं।

0

जावास्क्रिप्ट एक प्रोटोटाइप भाषा है और सी # जैसी शास्त्रीय भाषा नहीं है। यद्यपि जावास्क्रिप्ट में एक नया ऑपरेटर है जो सी # की तरह दिखता है, आपको इसे नई ऑब्जेक्ट्स या एरे बनाने के लिए उपयोग नहीं करना चाहिए।

//Bad way to declare objects and arrays 
var person = new Object(), 
    keys = new Array(); 

नए कीवर्ड भाषा को जोड़ा गया है आंशिक रूप से शास्त्रीय भाषाओं को खुश करने के लिए, लेकिन वास्तविकता में यह डेवलपर्स से अधिक उनकी मदद भ्रमित करने के लिए जाता है। इसके बजाय, जावास्क्रिप्ट में वस्तुओं और सरणी घोषित करने के मूल तरीके हैं और आपको इसके बजाय उन का उपयोग करना चाहिए।

पिछले वाक्यविन्यास का उपयोग करने के बजाय, आपको अपने शब्दों और सरणी को उनके शाब्दिक नोटेशन का उपयोग करके घोषित करना चाहिए।

//Preferred way to declare objects and arrays 
var person = {}, 
    keys = []; 

इस पैटर्न का उपयोग करके आप वास्तव में ऑब्जेक्ट लिटलल्स और सरणी प्रारंभकर्ता वाक्यविन्यास का उपयोग करके बहुत अधिक अभिव्यक्तिपूर्ण शक्ति रखते हैं।

//Preferred way to declare complex objects and arrays 
var person = { 
     firstName: "Elijah", 
     lastName: "Manor", 
     sayFullName: function() { 
      console.log(this.firstName + " " + 
       this.lastName); 
     } 
    }, 
    keys = ["123", "676", "242", "4e3"]; 

बेस्ट प्रैक्टिस

आप उनके शाब्दिक अंकन का उपयोग करने के बजाय नई आपरेशन का उपयोग कर अपने चर के सभी घोषित करना चाहिए। इसी तरह आपको बूलियन, संख्या, स्ट्रिंग या फ़ंक्शन के लिए नए कीवर्ड का उपयोग नहीं करना चाहिए। वे सब कुछ अतिरिक्त ब्लोट और धीमी चीजें जोड़ते हैं।

एकमात्र असली कारण है कि आप नए कीवर्ड का उपयोग क्यों करेंगे यदि आप एक नई वस्तु बना रहे हैं और आप इसे परिभाषित करने वाले निर्माता का उपयोग करना चाहते हैं। इस विषय के बारे में अधिक जानकारी के लिए आप डगलस क्रॉकफोर्ड की पोस्ट जावास्क्रिप्ट, We Hardly new Ya नामक पोस्ट देख सकते हैं।

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