javascript - यदि हम अपरिभाषित का मूल्य निर्धारित करते हैं तो क्या होता है?




undefined (2)

नीचे यह रेखा क्या करती है?

undefined = 'A value';

यदि यह undefined के मूल्य को नहीं बदलता है तो पर्दे के पीछे क्या होता है?


undefined वैश्विक वस्तु की एक संपत्ति है, अर्थात यह वैश्विक दायरे में परिवर्तनशील है। undefined का प्रारंभिक मूल्य आदिम मूल्य undefined

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined देखें

तो, यह सिर्फ एक चर है, इसके बारे में कुछ खास नहीं है। अब, आपके सवालों के जवाब देने के लिए:

  1. undefined = 'A value'; वैश्विक चर undefined 'A value' स्ट्रिंग 'A value' देने का प्रयास करता है
  2. पुराने ब्राउज़रों में मूल्य में परिवर्तन होता है, अर्थात undefined === 'A value'; // true undefined === 'A value'; // true । सख्त मोड के तहत नए ब्राउज़रों में ऑपरेशन में त्रुटि होती है।

आप ब्राउज़र कंसोल में निम्नलिखित परीक्षण कर सकते हैं (मैं यहां एक आधुनिक ब्राउज़र का उपयोग कर रहा हूं - Google Chrome):

undefined = true;
console.log(undefined); // undefined
// in older browsers like the older Internet Explorer it would have logged true

undefined का मूल्य उपरोक्त उदाहरण में नहीं बदलता है। ऐसा इसलिए है क्योंकि (जोर मेरा):

आधुनिक ब्राउज़रों (जावास्क्रिप्ट 1.8.5 / फ़ायरफ़ॉक्स 4+) में, अपरिभाषित ईसीएमएस्क्रिप्ट 5 विनिर्देश के अनुसार एक गैर-विन्यास योग्य, गैर-लेखन योग्य संपत्ति है

सख्त मोड के तहत:

'use strict';
undefined = true; // VM358:2 Uncaught TypeError: Cannot assign to read only property 'undefined' of object

मैंने strict mode साथ और बिना थोड़ा POC बनाया strict mode

इसका प्रभाव यह है कि, यदि आप strict mode का उपयोग नहीं कर रहे हैं तो सब कुछ ठीक हो जाता है। यदि आप strict mode का उपयोग कर रहे हैं, तो आपके पास एक अच्छा होगा:

TypeError: केवल 'अपरिभाषित' संपत्ति पढ़ने के लिए असाइन नहीं किया जा सकता

अब POC पर आते हैं:

"use strict"
var c;

if (c === undefined) {
  console.log("nothing happened")
}

undefined = "goofy"

c = "goofy"

if (c === undefined) {
  console.log("c is 'goofy' and it's equal to undefined.. gosh.. we broke js")
}

अब, जैसा कि मैंने कहा, कड़े मोड के साथ आप "use strict" को हटाते समय एक TypeError प्राप्त करते हैं, स्क्रिप्ट ठीक हो जाती है और आउटपुट बस nothing happened

मुझे यह Q / A मिल गया है जो अधिक उपयोगी हो सकता है यदि आप अधिक जानना चाहते हैं

नोट : मैंने Node.js का उपयोग करके इस कोड का परीक्षण किया है।






undefined