नीचे दी गई यह रेखा क्या करती है?क्या होता है यदि हम अपरिभाषित मूल्य निर्धारित करते हैं?
undefined = 'A value';
यह तो undefined
का मूल्य पर्दे के पीछे क्या होता है नहीं बदलती है?
नीचे दी गई यह रेखा क्या करती है?क्या होता है यदि हम अपरिभाषित मूल्य निर्धारित करते हैं?
undefined = 'A value';
यह तो undefined
का मूल्य पर्दे के पीछे क्या होता है नहीं बदलती है?
undefined
is a property of the global object, i.e. it is a variable in global scope. The initial value ofundefined
is the primitive valueundefined
.
देखें https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
तो, यह सिर्फ एक चर, इसके बारे में कुछ खास नहीं है। वैश्विक चर undefined
undefined === 'A value'; // true
के लिए एक स्ट्रिंग 'A value'
आवंटित करने के लिए
undefined = 'A value';
प्रयास: अब, आपके सवालों के जवाब। सख्त मोड के तहत नए ब्राउज़र में ऑपरेशन के परिणामस्वरूप त्रुटि होती है।आप एक ऐसे ब्राउज़र कंसोल में निम्नलिखित (मैं एक आधुनिक ब्राउज़र यहाँ उपयोग कर रहा हूँ - गूगल क्रोम) का परीक्षण कर सकते हैं:
undefined = true;
console.log(undefined); // undefined
// in older browsers like the older Internet Explorer it would have logged true
undefined
का मूल्य ऊपर के उदाहरण में नहीं बदलता है।
In modern browsers (JavaScript 1.8.5/Firefox 4+), undefined is a non-configurable, non-writable property per the ECMAScript 5 specification.
सख्त मोड के तहत:
'use strict';
undefined = true; // VM358:2 Uncaught TypeError: Cannot assign to read only property 'undefined' of object
"गैर-सख्त" मोड के तहत नए ब्राउज़र में क्या है? यह कोई त्रुटि नहीं दिखाता है। क्या यह कुछ भी करता है। cuz यह मान को बदलता नहीं है –
@Cgraphics गैर-सख्त मोड के तहत मध्यम ब्राउज़र में कुछ भी नहीं होता है। मान को अधिलेखित नहीं किया जा सकता है और इसमें कोई त्रुटि नहीं है ... लेकिन, लेकिन भविष्य में यह बदल सकता है। – Oleg
यही कारण है कि आप कभी-कभी 'शून्य' ऑपरेटर का उपयोग करेंगे - यह इसके तर्क का मूल्यांकन करता है और फिर 'अपरिभाषित' देता है, और क्योंकि यह एक ऑपरेटर है, इसे एक मान असाइन नहीं किया जा सकता है। इस प्रकार आप हमेशा 'शून्य 0' या' शून्य (0) 'अभिव्यक्ति के साथ' अपरिभाषित 'प्राप्त कर सकते हैं (ऑपरेटरों को तर्कों के चारों ओर अभिभावकों की आवश्यकता नहीं होती है)। –
मैं के साथ और strict mode
बिना एक छोटे से POC कर दिया है इसका कारण यह है (जोर मेरा) है।
प्रभाव यह है कि, यदि आप strict mode
का उपयोग नहीं कर रहे हैं तो सब ठीक हो जाता है। जैसा कि मैंने कहा
"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")
}
अब,, सख्त मोड के साथ आप एक TypeError
जबकि हटाने के प्राप्त:
TypeError: Cannot assign to read only property 'undefined'
अब POC के लिए मिलता है: आप strict mode
उपयोग कर रहे हैं आप एक अच्छा होगा "use strict"
स्क्रिप्ट ठीक हो जाती है और आउटपुट बस nothing happened
है।
मैं this Q/A अगर आप को पता है और अधिक
नोट चाहते हैं कि उपयोगी हो सकता है मिल गया है: मैं इस कोड का उपयोग कर Node.js
परीक्षण किया है।
क्यों node.js? मैंने सोचा कि यह सर्वर पक्ष –
@Cgraphics node.js के लिए था V8 का उपयोग करता है - एक ही जावास्क्रिप्ट इंजन Google क्रोम के रूप में, इसलिए यह मूल रूप से एक ही नियम है, लेकिन अलग-अलग एपीआई (ब्राउज़र में 'विंडो',' क्वेरी सिलेक्टर 'आदि है, नोड में ' वैश्विक ',' fs.write', आदि)। नोड के बाद से – Oleg
।जेएस यह वी 8 (Google क्रोम इंजन) पर बना है जो ईएस 6 का उपयोग करता है, यह पीओसी बनाने का सबसे तेज़ तरीका प्रतीत होता है। :) – FredMaggiowski
true
, 123
या null
जैसी चीजों के विपरीत, undefined
एक literal नहीं है। इसका मतलब है undefined
identifierundefined value प्राप्त करने का मूर्ख तरीका नहीं है। इसके बजाय, void
operator का उपयोग कर सकते हैं, उदा। void 0
।
डिफ़ॉल्ट रूप से, undefined
ने global object, जो वैश्विक चर है, की एक संपत्ति को परिभाषित किया है।ECMAScript 5 से पहले, कि संपत्ति लिखने योग्य था, इसलिए
undefined = "A value";
window.undefined
का मूल्य बदल दिया, यह मानते हुए यह एक स्थानीय चर द्वारा आच्छादित नहीं किया गया। फिर यदि आपने "A value" === undefined
का उपयोग किया है, तो आपको true
मिलेगा। और void 0 === undefined
false
का उत्पादन करेगा।
ईसीएमएस्क्रिप्ट 5 ने इस व्यवहार को बदल दिया, और अब संपत्ति लिखने योग्य नहीं है और न ही कॉन्फ़िगर करने योग्य है। इसलिए, undefined
को असाइनमेंट को गैर-सख्त मोड में अनदेखा कर दिया जाएगा, और एक अपवाद फेंक देगा सख्त मोड है। हुड के अंतर्गत,
undefined = "A value";
एक Simple Assignment"A value"
एक संदर्भ में आधार के साथ वैश्विक वस्तु, संदर्भित नाम "undefined"
, और सख्त झंडा डाल करने के लिए है।"undefined"
को संपत्ति के नाम, "A value"
को मान के रूप में, और फेंक ध्वज के रूप में सख्त ध्वज के रूप में गुजरता है।"undefined"
, संपत्ति डिस्क्रिप्टर {[[Value]]: "A value"}
, और फेंक ध्वज तर्क के रूप में कॉल करता है।हालांकि, अगर आप अभी भी स्थानीय undefined
चर घोषित करने के लिए कर सकते हैं:
(function() {
var undefined = "A value";
alert(undefined); // "A value";
})();
"हालांकि, आप अभी भी स्थानीय अपरिभाषित चर घोषित करने में सक्षम हैं:" - अच्छा बिंदु! –
तथ्य यह है कि यह एक त्रुटि फेंक नहीं है चिंताजनक – JCOC611
सिर्फ कंसोल में यह कोशिश की और यहां तक कि एक भी नहीं मिला है त्रुटि, मूल रूप से कुछ भी नहीं हुआ https://gyazo.com/6703d9f7768e272c1aad7d3750b08ef1 – vahanpwns
@ आशीष मिश्रा सच नहीं है। यह सिर्फ वैश्विक संदर्भ की एक संपत्ति है। – Pointy