javascript - क्यों है var x=x=x ||{= वर x=x से अधिक पूरी तरह से ||{}?



namespaces (1)

यदि आलेख दावा करता है कि विकल्प 3 "अधिक गहन," गलत है। उस असाइनमेंट श्रृंखला के मध्य में कोई मतलब नहीं है।

क्या कोई व्यक्ति विभिन्न विकल्पों के बीच के अंतरों पर कुछ प्रकाश डाल पाएगा और विशेष रूप से समझाएगा कि विकल्प 3 को अधिक गहन क्यों बताया गया है?

सबसे पहले, एक चेतावनी: यहां 2018 में, आप शायद इनमें से किसी का भी उपयोग नहीं करना चाहते हैं। इसके बजाय, उचित मॉड्यूल का उपयोग करें, या तो एक प्रासंगिक उपकरण के साथ विभिन्न मॉड्यूल परिभाषा RequireJS ( AMD , RequireJS , RequireJS ) के माध्यम से या import और export साथ ES2015 + मॉड्यूल के माध्यम से (और शायद एक प्रासंगिक उपकरण जैसे कि बैबेल और शायद वेबपैक या ब्राउज़राइज़ , हालांकि क्रोम, सफारी और एज के वर्तमान संस्करण देशी रूप से समर्थन करते हैं, और फ़ायरफ़ॉक्स वर्तमान में एक ध्वज के पीछे है)।

क्यों है var x = x = x || {} var x = x = x || {} var x = x || {} से अधिक पूरी तरह से var x = x || {} var x = x || {} ?

यह नहीं है।

विकल्प 2 ठीक है, लेकिन पहले से ही एक var myApplication कमी महसूस होती है या if(!window.myApplication) अन्यथा, यदि myApplication वैश्विक दायरे में नहीं है if(!myApplication) कोई त्रुटि होगी, तो क्या यह नहीं होगा?

हाँ। (यह मानते हुए कि उत्पादन वैश्विक दायरे में होता है। यदि यह वैश्विक दायरे में नहीं है और वर्तमान गुंजाइश श्रृंखला में कहीं भी इन-स्कोप myApplication , तो यह नहीं myApplication क्योंकि myApplication एक अनसुलझे प्रतीक नहीं होगा।)

विकल्प 3 वह है जिसके साथ मुझे परेशानी है: मेरी समझ यह है कि myApplication = myApplication को पहले निष्पादित किया जाता है, myApplication साथ वैश्विक दायरे में ( myApplication कारण var )। मेरी समस्या यह है कि मैं ऐसे मामले के बारे में नहीं सोच सकता जहाँ यह विकल्प विकल्प 1 से अधिक कुछ भी करता है।

नहीं, अगर आपके पास है

var myApplication = myApplication = myApplication || {}

यह वह क्रम है जिसमें चीजें होती हैं:

  1. var myApplication वैश्विक बनाता है यदि यह पहले से मौजूद नहीं है, तो यह अछूता छोड़ देता है यदि यह करता है
  2. myApplication || {} myApplication || {} का मूल्यांकन किया गया है और या तो myApplication में मान लेता है (यदि यह myApplication ) या {} (यदि नहीं); चलो उस मूल्य को बुलाओ value1
  3. myApplication = value1 (बीच में एक) किया जाता है, और परिणाम value1
  4. myApplication = value1 (बाईं ओर वाला) बिना किसी अच्छे कारण के फिर से किया जाता है

मेरी आँखों में विकल्प 4 में बेहतर लिखा गया होगा window.myApplication || (myApplication = {}) window.myApplication || (myApplication = {}) एक त्रुटि को फेंकने से बचने के लिए यदि myApplication वैश्विक दायरे में नहीं है।

वास्तव में।

विकल्प 5 undefined अलावा झूठ-वाई मूल्यों को छोड़कर है लेकिन क्या यह एक अच्छा विचार है? यदि myApplication को एक रिक्त स्ट्रिंग कहा जाता है, तो बाकी कोड विफल होने की संभावना है, है ना?

हाँ।

एक शुरुआत के रूप में स्वच्छ जावास्क्रिप्ट कोड लिखने के मेरे प्रयास में, मैं हाल ही में जावास्क्रिप्ट में नाम स्थान के बारे में यह लेख पढ़ रहा था जब मैं इस पैराग्राफ पर ठोकर खाई:

अगले नमूने के शीर्ष पर स्थित कोड विभिन्न तरीकों को प्रदर्शित करता है जिसमें आप यह देख सकते हैं कि क्या कोई चर (ऑब्जेक्ट नेमस्पेस) परिभाषित करने से पहले ही मौजूद है। आप आमतौर पर डेवलपर्स को विकल्प 1 का उपयोग करते देखेंगे, हालांकि विकल्प 3 और 5 को अधिक गहन माना जा सकता है और विकल्प 4 को एक अच्छा सर्वोत्तम अभ्यास माना जाता है।

// This doesn't check for existence of 'myApplication' in
// the global namespace. Bad practice as you can easily
// clobber an existing variable/namespace with the same name
var myApplication = {};

/*
The following options *do* check for variable/namespace existence.
If already defined, we use that instance, otherwise we assign a new
object literal to myApplication.

Option 1: var myApplication = myApplication || {};
Option 2  if(!MyApplication) MyApplication = {};
Option 3: var myApplication = myApplication = myApplication || {}
Option 4: myApplication || (myApplication = {});
Option 5: var myApplication = myApplication === undefined ? {} : myApplication;

*/

विकल्प 1 निश्चित रूप से वह है जिसे मैंने ज्यादातर समय देखा है, और मैं इसे अच्छी तरह से समझता हूं।

विकल्प 2 ठीक है, लेकिन पहले से ही एक var myApplication कमी महसूस होती है या if(!window.myApplication) अन्यथा, यदि myApplication वैश्विक दायरे में नहीं है if(!myApplication) कोई त्रुटि होगी, तो क्या यह नहीं होगा?

विकल्प 3 वह है जिसके साथ मुझे परेशानी है: मेरी समझ यह है कि myApplication = myApplication को पहले निष्पादित किया जाता है, myApplication साथ वैश्विक दायरे में ( myApplication कारण var )। मेरी समस्या यह है कि मैं ऐसे मामले के बारे में नहीं सोच सकता जहाँ यह विकल्प विकल्प 1 से अधिक कुछ भी करता है।

मेरी आँखों में विकल्प 4 में बेहतर लिखा गया होगा window.myApplication || (myApplication = {}) window.myApplication || (myApplication = {}) एक त्रुटि को फेंकने से बचने के लिए यदि myApplication वैश्विक दायरे में नहीं है।

विकल्प 5 undefined अलावा झूठ-वाई मूल्यों को छोड़कर है लेकिन क्या यह एक अच्छा विचार है? यदि myApplication को एक रिक्त स्ट्रिंग कहा जाता है, तो बाकी कोड विफल होने की संभावना है, है ना?

क्या कोई व्यक्ति विभिन्न विकल्पों के बीच के अंतरों पर कुछ प्रकाश डाल पाएगा और विशेष रूप से समझाएगा कि विकल्प 3 को अधिक गहन क्यों बताया गया है?





namespaces