मैंने इसे यहां से उठाया
अपरिभाषित मूल्य एक आदिम मूल्य है जिसका उपयोग तब किया जाता है जब एक चर को एक मान नहीं सौंपा गया हो।
अशक्त मूल्य एक आदिम मूल्य है जो अशक्त, रिक्त, या गैर-मौजूद संदर्भ का प्रतिनिधित्व करता है।
जब आप वेरिएबल के माध्यम से एक चर घोषित करते हैं और इसे एक मूल्य नहीं देते हैं, तो यह अपरिभाषित मूल्य होगा। अपने आप से, यदि आप इस मान को WScript.Echo () या सतर्क () करने का प्रयास करते हैं, तो आपको कुछ भी दिखाई नहीं देगा। हालाँकि, यदि आप इसे एक रिक्त स्ट्रिंग संलग्न करते हैं तो अचानक यह दिखाई देगा:
var s;
WScript.Echo(s);
WScript.Echo("" + s);
आप एक चर घोषित कर सकते हैं, इसे शून्य पर सेट कर सकते हैं, और व्यवहार समान है सिवाय इसके कि आप "अशक्त" बनाम "अपरिभाषित" छपे हुए देखेंगे। यह वास्तव में एक छोटा सा अंतर है।
आप एक ऐसे चर की तुलना भी कर सकते हैं जो अशक्त या इसके विपरीत है, और यह शर्त सही होगी:
undefined == null
null == undefined
हालांकि, उन्हें दो अलग-अलग प्रकारों में माना जाता है। जबकि अपरिभाषित एक प्रकार है जो सभी के लिए है, अशक्त एक विशेष वस्तु मान है। आप इसे टाइपोफ () का उपयोग करके देख सकते हैं जो एक चर के सामान्य प्रकार का प्रतिनिधित्व करने वाला एक स्ट्रिंग देता है:
var a;
WScript.Echo(typeof(a));
var b = null;
WScript.Echo(typeof(b));
उपरोक्त स्क्रिप्ट चलाने से निम्न आउटपुट प्राप्त होंगे:
undefined
object
उनके अलग-अलग प्रकार के होने के बावजूद, वे तब भी एक ही कार्य करेंगे यदि आप किसी एक के सदस्य तक पहुंचने का प्रयास करते हैं, जैसे कि यह कहना है कि वे एक अपवाद फेंक देंगे। डब्लूएसएच के साथ आप देखेंगे कि खूंखार "'वैरनाम' शून्य या वस्तु नहीं है" और यदि आप भाग्यशाली हैं (लेकिन यह एक अन्य लेख के लिए एक विषय है)।
आप स्पष्ट रूप से अपरिभाषित होने के लिए एक चर सेट कर सकते हैं, लेकिन मैं इसके खिलाफ अत्यधिक सलाह देता हूं। मैं केवल अशक्त करने के लिए चर सेट करने की सलाह देता हूं और उन चीजों के लिए अपरिभाषित मूल्य को छोड़ देता हूं जिन्हें आप सेट करना भूल गए थे। उसी समय, मैं वास्तव में आपको हमेशा हर चर सेट करने के लिए प्रोत्साहित करता हूं। जावास्क्रिप्ट में सी-स्टाइल भाषाओं की तुलना में एक स्कोप चेन है, जो आसानी से दिग्गज प्रोग्रामरों को भी भ्रमित करता है, और चर को शून्य करने के लिए इसके आधार पर बग को रोकने का सबसे अच्छा तरीका है।
एक और उदाहरण जहां आप अपरिभाषित पॉप अप देखेंगे, डिलीट ऑपरेटर का उपयोग करते समय। सी-वर्ल्ड से हम में से कोई एक वस्तु को नष्ट करने के रूप में गलत व्याख्या कर सकता है, लेकिन ऐसा नहीं है। यह ऑपरेशन जो करता है वह किसी ऐरे से सबस्क्रिप्ट या ऑब्जेक्ट से सदस्य को हटा देता है। Arrays के लिए यह लंबाई को प्रभावित नहीं करता है, बल्कि यह है कि सबस्क्रिप्ट अब अपरिभाषित माना जाता है।
var a = [ 'a', 'b', 'c' ];
delete a[1];
for (var i = 0; i < a.length; i++)
WScript.Echo((i+".) "+a[i]);
उपरोक्त स्क्रिप्ट का परिणाम है:
0.) a
1.) undefined
2.) c
एक उपप्रकाश या सदस्य जो कभी अस्तित्व में नहीं था, उसे पढ़ते हुए आपको अपरिभाषित लौटाया जाएगा।
अशक्त और अपरिभाषित के बीच का अंतर है: जावास्क्रिप्ट कभी भी अशक्त करने के लिए कुछ भी निर्धारित नहीं करेगा, यह आमतौर पर हम क्या करते हैं। जबकि हम चर को अपरिभाषित कर सकते हैं, हम अशक्त पसंद करते हैं क्योंकि यह ऐसा कुछ नहीं है जो कभी हमारे लिए किया जाता है। जब आप डिबगिंग कर रहे हैं, तो इसका मतलब है कि शून्य पर सेट कुछ भी आपके अपने काम का है न कि जावास्क्रिप्ट का। इसके अलावा, ये दो विशेष मूल्य लगभग बराबर हैं।
null
?