दिलचस्प पोस्ट
एक चर या पैरामीटर का नाम प्राप्त करें अजगर में अच्छा कॉलम आउटपुट बनाएं एचटीएमएल: क्या XHTML वैध तरीके से प्रत्येक तालिका पंक्ति में एक FORM टैग होना संभव है? फेसबुक का एफबी। आईआईटी पूरा होने पर कैसे पता लगाया जाए माता-पिता के नियंत्रण की चौड़ाई के लिए WPF टैब आइटम शीर्षकों को कैसे बढ़ाएं पुनर्निर्देशन के बाद खिड़की। ओपल रिक्त है मैक हार्ड डिस्क से सीरियल नंबर कैसे प्राप्त करें? मामले में असंवेदनशील xpath php में खोज चार बिंदुओं की सरणी के मामले में 'सरणी नाम' का क्या अर्थ है? HTML5 कैनवास पर घुमाए गए पाठ को आकर्षित करना $ संसाधन के रूप में पारित करने के लिए @ क्या है? मैं TIMESTAMP कॉलम से दिनांक / समय की जानकारी कैसे प्राप्त करूं? सी-ऑब्जेक्ट सी क्लास को सी + ऑब्जेक्ट जोड़ना ग्रहण त्रुटि: "दूरस्थ VM से कनेक्ट करने में विफल" स्टोरीबोर्ड व्यू तत्व गरेड आउट

घोषित और अघोषित वैरिएबल का प्रभाव

जावास्क्रिप्ट घोषित और अघोषित वैरिएबल के बीच मुख्य अंतर क्या है, क्योंकि हटाए गए ऑपरेटर घोषित चर पर काम नहीं करता है?

var y = 43; // declares a new variable x = 42; delete x; // returns true (x is a property of the global object and can be deleted) delete y; // returns false (delete doesn't affect variable names) 

ऐसा क्यों होता है? वैश्विक रूप से घोषित वेरिएबल भी खिड़की ऑब्जेक्ट के गुण हैं, इसलिए इसे हटाया नहीं जा सकता है?

Solutions Collecting From Web of "घोषित और अघोषित वैरिएबल का प्रभाव"

घोषित और अघोषित वैश्विक वैरिएबल

उन्हें भंडारण और उनका उपयोग करने के लिए तंत्र एक समान है, लेकिन जावास्क्रिप्ट उन्हें configurable करने configurable विशेषता (नीचे वर्णित) के मूल्य के आधार पर कुछ मामलों में अलग तरीके से व्यवहार करता है नियमित उपयोग में, उन्हें वही व्यवहार करना चाहिए

दोनों वैश्विक वस्तु में मौजूद हैं

नीचे घोषित और अघोषित वैश्विक वैरिएबल के कुछ तुलना हैं

 var declared = 1; // Explicit global variable (new variable) undeclared = 1; // Implicit global variable (property of default global object) window.hasOwnProperty('declared') // true window.hasOwnProperty('undeclared') // true window.propertyIsEnumerable('declared') // true window.propertyIsEnumerable('undeclared') // true window.declared // 1 window.undeclared // 1 window.declared = 2; window.undeclared = 2; declared // 2 undeclared // 2 delete declared // false delete undeclared // true delete undeclared // true (same result if delete it again) delete window.declared // false delete window.undeclared // true (same result if delete it yet again) delete window.undeclared // true (still true) 

दोनों घोषित और अघोषित ग्लोबल वैरिएबल window ऑब्जेक्ट (डिफ़ॉल्ट वैश्विक ऑब्जेक्ट) के गुण हैं। प्रोटोटाइप श्रृंखला के माध्यम से कोई भी एक अलग ऑब्जेक्ट से विरासत में नहीं मिला है। वे दोनों सीधे window ऑब्जेक्ट में मौजूद हैं (क्योंकि window.hasOwnProperty दोनों के लिए true रिटर्न)

कॉन्फ़िगर करने योग्य विशेषता

घोषित वैश्विक वैरिएबल के लिए, configurable करने configurable विशेषता falseअघोषित वैश्विक चर के लिए, यह trueconfigurable करने configurable विशेषता का मूल्य getOwnPropertyDescriptor विधि का उपयोग करके पुनः प्राप्त किया जा सकता है, जैसा कि नीचे दिखाया गया है।

 var declared = 1; undeclared = 1; (Object.getOwnPropertyDescriptor(window, 'declared')).configurable // false (Object.getOwnPropertyDescriptor(window, 'undeclared')).configurable // true 

अगर किसी प्रॉपर्टी का configurable करने configurable विशेषता सत्य है, गुण की विशेषता defineProperty विधि का उपयोग करके बदल सकती है, और गुण हटाए जाने वाले ऑपरेटर का उपयोग करके हटाया जा सकता है। अन्यथा, विशेषताओं को बदला नहीं जा सकता है, और संपत्ति को इस तरीके से हटाया नहीं जा सकता।

गैर-सख्त मोड में , delete ऑपरेटर रिटर्न true अगर संपत्ति कॉन्फ़िगर करने योग्य है, और यदि वह गैर-कॉन्फ़िगर करने योग्य है तो false वापसी करता है।

सारांश

घोषित वैश्विक चर

  • डिफ़ॉल्ट वैश्विक ऑब्जेक्ट की एक संपत्ति है ( window )
  • गुण विशेषताओं को बदला नहीं जा सकता।
  • delete ऑपरेटर का उपयोग करके हटाया नहीं जा सकता

अघोषित वैश्विक चर

  • डिफ़ॉल्ट वैश्विक ऑब्जेक्ट की एक संपत्ति है ( window )
  • गुण विशेषताओं को बदला जा सकता है।
  • delete ऑपरेटर का उपयोग करके हटाया जा सकता है

यह भी देखें

  • ऑपरेटर हटाएं
  • Object.defineProperty
  • Object.getOwnPropertyDescriptor
  • hasOwnProperty
  • सख्त मोड

मुख्य अंतर यह है कि जब आप एक फ़ंक्शन के अंदर चर घोषित कर रहे हैं। यदि आप एक फ़ंक्शन के अंदर एक चर को घोषित करते समय var उपयोग करते हैं, तो वह चर एक स्थानीय चर हो जाता है हालांकि, अगर आप var उपयोग नहीं करते हैं, तो वेरिएबल एक वैश्विक चर बन जाता है, चाहे आप इसे घोषित कर दें (फ़ंक्शन के अंदर या बाहर)।

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

 var y = 43; delete y; //returns false because it is has a DontDelete attribute 

जबकि अघोषित असाइनमेंट डॉट डेलटेट जैसी कोई विशेषताओं को सेट नहीं करता है। इसलिए जब हम इस अघोषित वेरिएबल पर डिलीट ऑपरेटर को लागू करते हैं, तो यह सही होता है

 x = 42; delete x; //returns true because it doesn't have a DontDelete attribute 

संपत्ति असाइनमेंट और परिवर्तनीय घोषणा के बीच का अंतर- दूसरा एक ने डोंटडेलेट सेट किया है, जबकि पूर्व एक नहीं है। यही कारण है कि अघोषित काम एक deletable संपत्ति बनाता है

ऑपरेटर को कैसे बिल्कुल हटाना काम करता है

हटाने के उद्देश्य के गुणों पर केवल प्रभावी है इसका चर या फ़ंक्शन के नाम पर कोई प्रभाव नहीं है I

आपके मामले में एक्स = 42; चर एक्स की घोषणा करता है और इसे वैश्विक वस्तु की संपत्ति बना देता है तो यह सच देता है

और var y = 43; एक वैश्विक वैरिएबल घोषित करता है जो कि किसी भी ऑब्जेक्ट का हिस्सा नहीं है, इसलिए यह झूठी रिटर्न देता है।