जावास्क्रिप्ट में अशक्त और अपरिभाषित के बीच अंतर क्या है?


1083

मैं जानना चाहता हूं कि जावास्क्रिप्ट में nullऔर इसके बीच क्या अंतर है undefined




11
मैंने हमेशा सोचा: nullक्या आप इसे खाली करने के लिए तैयार हैं, undefinedयह खाली है क्योंकि इसे सेट नहीं किया गया है। या nullउद्देश्य पर खाली है, जबकि undefinedअभी भी खाली है। मूल रूप से यह इरादा दिखाता है।
मुहम्मद उमर


15
NaN। अपने आप को देखो। console.log (शून्य-अपरिभाषित)। अशक्त और अपरिभाषित के बीच अंतर NaN है। (ध्यान दें कि यह हास्य का एक प्रयास है, इससे पहले कि आप मुझे इस गलतफहमी के लिए आग में झोंक दें।)
इवान

जवाबों:


1037

जावास्क्रिप्ट में, undefinedइसका मतलब है कि एक चर घोषित किया गया है, लेकिन अभी तक एक मान नहीं सौंपा गया है, जैसे:

var TestVar;
alert(TestVar); //shows undefined
alert(typeof TestVar); //shows undefined

nullएक असाइनमेंट मान है। यह बिना मूल्य के प्रतिनिधित्व के रूप में एक चर को सौंपा जा सकता है:

var TestVar = null;
alert(TestVar); //shows null
alert(typeof TestVar); //shows object

पूर्ववर्ती उदाहरणों से, यह स्पष्ट है कि undefinedऔर nullदो अलग-अलग प्रकार हैं: undefinedएक प्रकार का स्वयं (अपरिभाषित) है जबकि nullएक वस्तु है।

null === undefined // false
null == undefined // true
null === null // true

तथा

null = 'value' // ReferenceError
undefined = 'value' // 'value'

301
व्यावसायिक जेएस फॉर वेब डेवलपर्स (Wrox) पुस्तक से उद्धरण: "आप आश्चर्यचकित हो सकते हैं कि टाइपऑफ़ ऑपरेटर शून्य मान के लिए 'ऑब्जेक्ट' क्यों देता है। यह वास्तव में मूल जावास्क्रिप्ट कार्यान्वयन में एक त्रुटि थी जिसे तब ECMAScript में कॉपी किया गया था। आज , यह तर्कसंगत है कि अशक्त वस्तु के लिए एक प्लेसहोल्डर माना जाता है, भले ही तकनीकी रूप से, यह एक आदिम मूल्य है। "
कप्तान संवेदनशील

34
चर के रूप में अच्छी तरह से परिभाषित नहीं किया जा सकता है। उदाहरण के लिए: कंसोल.लॉग (टाइपोफ़ (एबीसी)); अपरिभाषित
Nir O.

19
Nir O. की टिप्पणी बहुत महत्वपूर्ण है। अगर मुझे एक वैरिएबल चाहिए, जिसका शुरुआत में कोई मूल्य नहीं है, तो मैं "... = null" लिखता हूं, उदाहरण के लिए "myvar = null"। इस तरह - जब मैं गलत तरीके से "if (myxar == null) {...}" - अगर ब्लॉक को निष्पादित नहीं किया गया है। अपरिभाषित से मेरा यह लाभ नहीं है: मायवर = अपरिभाषित; मायवर = 4; अगर (टाइप करें myxar == "अपरिभाषित") {...}
वोल्फगैंग एडमेक

11
@ वोल्फगैंग एडमेक, त्रुटि-मुक्त प्रोग्रामिंग मिस्टिप के बारे में नहीं है।
जॉर्ज फ्यूएंटेस गोंजालेज

12
इसलिए मूल रूप से शून्य मान का मतलब है कि एक चर को स्पष्ट रूप से (कोई मूल्य = शून्य) के रूप में सेट किया गया है या इसे आरंभीकृत किया गया है और कुछ भी नहीं होने के लिए परिभाषित किया गया है। जबकि अपरिभाषित का अर्थ है। यह शायद कभी भी आरंभिक नहीं था या यदि यह कभी परिभाषित नहीं किया गया था।
मुहम्मद उमर

73

मैंने इसे यहां से उठाया

अपरिभाषित मूल्य एक आदिम मूल्य है जिसका उपयोग तब किया जाता है जब एक चर को एक मान नहीं सौंपा गया हो।

अशक्त मूल्य एक आदिम मूल्य है जो अशक्त, रिक्त, या गैर-मौजूद संदर्भ का प्रतिनिधित्व करता है।

जब आप वेरिएबल के माध्यम से एक चर घोषित करते हैं और इसे एक मूल्य नहीं देते हैं, तो यह अपरिभाषित मूल्य होगा। अपने आप से, यदि आप इस मान को 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

एक उपप्रकाश या सदस्य जो कभी अस्तित्व में नहीं था, उसे पढ़ते हुए आपको अपरिभाषित लौटाया जाएगा।

अशक्त और अपरिभाषित के बीच का अंतर है: जावास्क्रिप्ट कभी भी अशक्त करने के लिए कुछ भी निर्धारित नहीं करेगा, यह आमतौर पर हम क्या करते हैं। जबकि हम चर को अपरिभाषित कर सकते हैं, हम अशक्त पसंद करते हैं क्योंकि यह ऐसा कुछ नहीं है जो कभी हमारे लिए किया जाता है। जब आप डिबगिंग कर रहे हैं, तो इसका मतलब है कि शून्य पर सेट कुछ भी आपके अपने काम का है न कि जावास्क्रिप्ट का। इसके अलावा, ये दो विशेष मूल्य लगभग बराबर हैं।


8
वास्तव में एक अच्छा जवाब। लेकिन सिर्फ इंगित करने के लिए, जब यू ने "अपरिभाषित == अशक्त" चेक किया, तो प्रकार की जाँच सख्त नहीं थी। इसलिए यह "सच" लौटा। यदि आप "अपरिभाषित === अशक्त" की जाँच करते हैं, तो यह गलत होगा।
wOlVeRiNe

3
यह ध्यान देने योग्य है कि जब यह टिप्पणी '11 में सही थी, तो वैकल्पिक फ़ंक्शन पैरामेट्स के आगमन के साथ, टाइप-चेकिंग सिस्टम जैसे फ्लो का उदय, और रिएक्ट की व्यापकता (जो सभी अपरिभाषित और अशक्त रूप से अलग-अलग व्यवहार करते हैं), का पुराना ज्ञान आमतौर पर अपरिभाषित के बजाय अशक्त का उपयोग करना अब इतनी सख्ती नहीं रखता है। अपरिभाषित वास्तव में कई मामलों में अशक्त करने के लिए बेहतर है, जहां आप स्पष्ट रूप से डिफ़ॉल्ट मान का उपयोग करना चाहते हैं (उदाहरण के लिए एक वैकल्पिक परम या वैकल्पिक प्रतिक्रिया प्रोप)।
0x24a537r9

64

यही अंतर है

(वर्णों की कमी के कारण वर्ण जोड़ना, इसलिए मुझे यह पोस्ट करने की अनुमति है।)


1
क्या आप छवि स्रोत के लिए कृपया शामिल हो सकते हैं?
वेगा

1
@Vega दुर्भाग्य से नहीं, मुझे याद नहीं है कि मैं इसे imgur.com पर कहीं और से कहां से मिला हूं और यह शायद एक रेपोस्ट से है, न कि मूल स्रोत। यहां तक ​​कि एम्बेडेड लिंक भी इस संस्करण को पोस्ट करने वाले का कोई सुराग नहीं देता है, इसलिए मैं वास्तव में इसके लिए खोज नहीं कर सकता हूं।
सेबेस्टियन नॉर

1
हा हा हा ... यह सबसे अच्छा स्पष्टीकरण है जो मैंने कभी देखा है! ठंडा!
अकबर मिरसिद्धिकोव

36

नल एक विशेष कीवर्ड है जो मूल्य की अनुपस्थिति को इंगित करता है।

मूल्य के रूप में इसके बारे में सोचो, जैसे:

  • "फू" स्ट्रिंग है,
  • सच है बूलियन,
  • 1234 नंबर है,
  • अशक्त अपरिभाषित है।

अपरिभाषित संपत्ति इंगित करती है कि एक चर को शून्य सहित एक मूल्य भी नहीं सौंपा गया है। पसंद

var foo;

परिभाषित खाली चर nullडेटाटाइप का हैundefined


दोनों एक चर के मान का प्रतिनिधित्व कर रहे हैं जिसका कोई मूल्य नहीं है

और उस स्ट्रिंग काnull प्रतिनिधित्व नहीं करता है जिसका कोई मूल्य नहीं है - खाली स्ट्रिंग-


पसंद

var a = ''; 
console.log(typeof a); // string 
console.log(a == null); //false 
console.log(a == undefined); // false 

अब अगर

var a;
console.log(a == null); //true
console.log(a == undefined); //true 

परंतु

var a; 
console.log(a === null); //false 
console.log(a === undefined); // true

तो हर एक का उपयोग करने का अपना तरीका है

अपरिभाषित उपयोग चर डेटा प्रकार की तुलना करने के लिए

शून्य का उपयोग किसी चर के मान को खाली करने के लिए करें

var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object 

नल भी एक डेटा प्रकार है। अपरिभाषित और अशक्त दोनों डेटा प्रकार और मूल्य हैं
danwellman

9
nullपूरी तरह से एक डेटा प्रकार है: msdn.microsoft.com/en-us/library/ie/7wkd9z69(v=vs.94).aspx। तथ्य यह है कि typeof nullरिटर्न objectईसीएमएस्क्रिप्ट के शुरुआती संस्करणों में एक प्रसिद्ध और प्रलेखित बग है जो पश्च-संगतता के लिए बना हुआ है। लिंक जो आपने वास्तव में अपनी टिप्पणी में पोस्ट किया था, पेज "टाइपो null // ऑब्जेक्ट (ECMAScript में बग, अशक्त होना चाहिए") को आधा नीचे कहता है! तो कृपया, नीचे दिए गए मतों पर टिप्पणी करने से पहले कुछ खोज प्रयास दिखाएं
danwellman

1
परिभाषाओं का विरोधाभास: "मूल्य की अनुपस्थिति" बनाम "को एक मूल्य नहीं सौंपा गया है"। क्या यह समान नहीं है?
ज़ोन

3
मैं इस जवाब से असहमत हूं। अशक्त और अपरिभाषित दोनों अलग-अलग डेटाटेप हैं। अशक्त प्रकार अशक्त का है और अपरिभाषित प्रकार अपरिभाषित का है। केवल एक सत्य ऑपरेटर (==) का उपयोग करते समय हम देख सकते हैं कि जावास्क्रिप्ट इसका सही कहता है लेकिन एक सख्त तुलना (===) एक झूठा पैदा करता है।
अलाबौदी

19

अशक्त : एक चर के लिए मूल्य की अनुपस्थिति; अपरिभाषित : स्वयं चर की अनुपस्थिति;

..जहां चर एक मूल्य से जुड़ा एक प्रतीकात्मक नाम है।

JS अशक्त रूप से नव घोषित चर के साथ पर्याप्त रूप से निष्क्रिय हो सकती है , लेकिन ऐसा नहीं है।


25
var a = {}; a.n = undefined;' then ..a.hasOwnProperty ('n') == true` ... इसलिए चर की अनुपस्थिति कहना अब सही नहीं है
मुहम्मद उमर

17

कृपया निम्नलिखित को ध्यान से पढ़ें। यह अशक्त और अपरिभाषित के बीच के अंतर के बारे में आपके सभी संदेहों को दूर करेगा जावास्क्रिप्ट में । इसके अलावा, आप प्रकारों का निर्धारण करने के लिए नीचे दिए गए उपयोगिता फ़ंक्शन का उपयोग कर सकते हैं।

जावास्क्रिप्ट में हमारे पास निम्नलिखित प्रकार के चर हो सकते हैं।

  1. अघोषित चर
  2. घोषित लेकिन अप्रमाणित चर
  3. शाब्दिक अपरिभाषित के साथ चर सौंपा
  4. वेरिएबल को शाब्दिक नल के साथ सौंपा गया है
  5. अपरिभाषित या अशक्त के अलावा अन्य चीज़ों के साथ चर

निम्नलिखित प्रत्येक मामले को एक-एक करके समझाता है

  1. अघोषित चर : निम्नलिखित अघोषित चर के लिए सही है

    • केवल टाइपोफ () द्वारा जांचा जा सकता है जो स्ट्रिंग लौटाता है 'अपरिभाषित'
    • == या === के साथ या यदि या सशर्त ऑपरेटर द्वारा जाँच नहीं की जा सकती है ? (संदर्भ त्रुटि फेंकता है)
  2. घोषित लेकिन अप्रमाणित चर

    • टाइपऑफ़ रिटर्न स्ट्रिंग 'अपरिभाषित'
    • == शून्य रिटर्न के साथ जांच सही है
    • == अपरिभाषित रिटर्न के साथ जांच सही है
    • === अशक्त रिटर्न के साथ जाँचें झूठी हैं
    • === अपरिभाषित रिटर्न के साथ जांच सही
    • अगर या सशर्त ऑपरेटर ? झूठा लौटता है
  3. शाब्दिक अपरिभाषित के साथ असाइन किए गए चर : इन चरों को समान रूप से घोषित लेकिन निरुपित चर के रूप में माना जाता है ।

  4. वेरिएबल को शाब्दिक नल के साथ सौंपा गया है

    • टाइपोफ ने स्ट्रिंग 'ऑब्जेक्ट' लौटाया
    • == शून्य रिटर्न के साथ जांच सही है
    • == अपरिभाषित रिटर्न के साथ जांच सही है
    • === साथ जांच अशक्त रिटर्न सच
    • === अपरिभाषित रिटर्न के साथ जाँचें झूठी
    • अगर या सशर्त ऑपरेटर ? झूठा लौटता है
  5. अपरिभाषित या अशक्त के अलावा अन्य चीज़ों के साथ चर

    • टाइपोफ़ निम्न तार में से एक देता है: 'स्ट्रिंग' , 'संख्या' , 'बूलियन' , 'फंक्शन' , 'ऑब्जेक्ट' , 'सिंबल'

निम्नलिखित चर के सही प्रकार की जाँच के लिए एल्गोरिथ्म प्रदान करता है:

  1. के लिए जाँच करें अघोषित / निर्दिष्ट नहीं किए गए / साथ सौंपा अपरिभाषित का उपयोग कर typeof । वापसी अगर स्ट्रिंग 'अपरिभाषित' वापस आ गया है।
  2. === का उपयोग कर अशक्त के लिए जाँच करें । अगर सही है तो 'null' लौटाएं ।
  3. टाइपोफ़ का उपयोग करके वास्तविक प्रकार की जाँच करें । वापसी प्रकार यदि 'ऑब्जेक्ट' के बराबर नहीं है
  4. वास्तविक ऑब्जेक्ट प्रकार निर्धारित करने के लिए Object.prototype.toString.call (o) को कॉल करें। यह जावास्क्रिप्ट या डोम परिभाषित ऑब्जेक्ट्स में निर्मित सभी प्रकार के लिए '[ऑब्जेक्ट ऑब्जेक्ट टाइप]' की एक स्ट्रिंग लौटाएगा । उपयोगकर्ता द्वारा परिभाषित वस्तुओं के लिए यह '' वस्तु वस्तु] ' लौटाता है

आप प्रकारों के निर्धारण के लिए निम्नलिखित उपयोगिता फ़ंक्शन का भी उपयोग कर सकते हैं। यह वर्तमान में सभी ECMA 262 2017 प्रकारों का समर्थन करता है।

function TypeOf(o,bReturnConstructor)
 {
   if(typeof o==='undefined') return 'undefined'
   if(o===null) return 'null'   
   if(typeof o!=='object') return typeof o

   var type=Object.prototype.toString.call(o)
  switch(type)
  {
     //Value types:4
     case '[object Number]': type='number';break;
     case '[object String]': type='string';break;
     case '[object Boolean]': type='boolean';break;
     case '[object Date]': type='date';break;


   //Error Types:7
     case '[object Error]': type='error';break;
     case '[object EvalError]': type='evalerror';break;
     case '[object RangeError]': type='rangeerror';break;
     case '[object ReferenceError]': type='referenceerror';break;
     case '[object SyntaxError]': type='syntaxerror';break;
     case '[object TypeError]': type='typeerror';break;
     case '[object URIError]': type='urierror';break;


    //Indexed Collection and Helper Types:13
     case '[object Array]': type='array';break;
     case '[object Int8Array]': type='int8array';break;
     case '[object Uint8Array]': type='uint8array';break;
     case '[object Uint8ClampedArray]': type='uint8clampedarray';break;
     case '[object Int16Array]': type='int16array';break;
     case '[object Uint16Array]': type='uint16array';break;
     case '[object Int32Array]': type='int32array';break;
     case '[object Uint32Array]': type='uint32array';break;
     case '[object Float32Array]': type='float32array';break;
     case '[object Float64Array]': type='float64array';break;
     case '[object ArrayBuffer]': type='arraybuffer';break;
     case '[object SharedArrayBuffer]': type='sharedarraybuffer';break;
     case '[object DataView]': type='dataview';break;

    //Keyed Collection Types:2
     case '[object Map]': type='map';break;
     case '[object WeakMap]': type='weakmap';break;

    //Set Types:2
     case '[object Set]': type='set';break;
     case '[object WeakSet]': type='weakset';break;

    //Operation Types
    case '[object RegExp]': type='regexp';break;
    case '[object Proxy]': type='proxy';break;
    case '[object Promise]': type='promise';break;

    case '[object Object]': type='object';
             if(bReturnConstructor && o.constructor) type=o.constructor.toString().match(/^function\s*([^\s(]+)/)[1];
         break;
    default:
        type=type.split(' ')[1]
        type=type.substr(0,type.length-1)   

   }
    return type 
}

12

आप प्रोग्राम-स्तर, सामान्य, या अपेक्षित अनुपस्थिति की अनुपस्थिति का प्रतिनिधित्व करने के लिए सिस्टम-स्तर, अप्रत्याशित, या त्रुटि-अनुपस्थिति की अनुपस्थिति का प्रतिनिधित्व करने के लिए अपरिभाषित मान सकते हैं।

जावास्क्रिप्ट के माध्यम से: निश्चित गाइड


11

मैं समझाता हूँ undefined, nullऔर Uncaught ReferenceError:

1 - Uncaught ReferenceError: आपकी स्क्रिप्ट में वेरिएबल घोषित नहीं किया गया है , इस वेरिएबल का कोई संदर्भ नहीं है
2 - undefined: वेरिएबल डिक्लेयर किया गया है लेकिन
3 इनिशियलाइज़ नहीं किया गया है - nullवेरिएबल डिक्लेयर किया गया है और एक खाली वैल्यू है


9

अपरिभाषित का मतलब है कि एक चर घोषित किया गया है, लेकिन इसका कोई मूल्य नहीं है:

var var1;
alert(var1); //undefined
alert(typeof var1); //undefined

नल एक असाइनमेंट है:

var var2= null;
alert(var2); //null
alert(typeof var2); //object

9

अशक्त और अपरिभाषित दो अलग-अलग ऑब्जेक्ट प्रकार हैं जो निम्नलिखित में सामान्य हैं:

  • दोनों क्रमशः एक ही मूल्य, शून्य और अपरिभाषित पकड़ सकते हैं;
  • दोनों के पास कोई गुण या विधियां नहीं हैं और या तो किसी भी गुण को पढ़ने का प्रयास एक रन-टाइम त्रुटि (अन्य सभी वस्तुओं के लिए, यदि आप एक गैर-मौजूद संपत्ति पढ़ने की कोशिश करते हैं, तो आपको अपरिभाषित मूल्य मिल सकता है );
  • मूल्यों को शून्य और अपरिभाषित एक दूसरे के बराबर माना जाता है ==और !=ऑपरेटरों द्वारा और कुछ भी नहीं ।

समानताएँ यहाँ समाप्त होती हैं। एक बार के लिए, इस तरीके में एक बुनियादी अंतर है कि कैसे कीवर्ड अशक्त और अपरिभाषित हैं। यह स्पष्ट नहीं है, लेकिन निम्नलिखित उदाहरण पर विचार करें:

var undefined = "foo";
WScript.Echo(undefined); // This will print: foo

अपरिभाषित , NaN और इन्फिनिटी केवल प्रीइंस्ट्रिक्टेड "सुपरग्लोबल" वेरिएबल्स के नाम हैं - इन्हें रन-टाइम पर आरंभ किया जाता है और समान नामों के साथ सामान्य वैश्विक या स्थानीय चर द्वारा ओवरराइड किया जा सकता है।

अब, नल के साथ एक ही बात की कोशिश करते हैं :

var null = "foo"; // This will cause a compile-time error
WScript.Echo(null);

ऊप्स! अशक्त , सत्य और असत्य आरक्षित खोजशब्द हैं - संकलक आपको उन्हें चर या संपत्ति के नाम के रूप में उपयोग नहीं करने देंगे

एक और अंतर यह है कि अपरिभाषित एक आदिम प्रकार है, जबकि अशक्त एक वस्तु प्रकार है (एक वस्तु संदर्भ के अनुपस्थिति को इंगित करता है)। निम्नलिखित को धयान मे रखते हुए:

WScript.Echo(typeof false); // Will print: boolean
WScript.Echo(typeof 0); // Will print: number
WScript.Echo(typeof ""); // Will print: string
WScript.Echo(typeof {}); // Will print: object
WScript.Echo(typeof undefined); // Will print: undefined
WScript.Echo(typeof null); // (!!!) Will print: object

इसके अलावा, शून्य और अपरिभाषित तरीके का एक महत्वपूर्ण अंतर संख्यात्मक संदर्भ में माना जाता है:

var a; // declared but uninitialized variables hold the value undefined
WScript.Echo(a === undefined); // Prints: -1

var b = null; // the value null must be explicitly assigned 
WScript.Echo(b === null); // Prints: -1

WScript.Echo(a == b); // Prints: -1 (as expected)
WScript.Echo(a >= b); // Prints: 0 (WTF!?)

WScript.Echo(a >= a); // Prints: 0 (!!!???)
WScript.Echo(isNaN(a)); // Prints: -1 (a evaluates to NaN!)
WScript.Echo(1*a); // Prints: -1.#IND (in Echo output this means NaN)

WScript.Echo(b >= b); // Prints: -1 (as expected)
WScript.Echo(isNaN(b)); // Prints: 0 (b evaluates to a valid number)
WScript.Echo(1*b); // Prints: 0 (b evaluates to 0)

WScript.Echo(a >= 0 && a <= 0); // Prints: 0 (as expected)
WScript.Echo(a == 0); // Prints: 0 (as expected)
WScript.Echo(b >= 0 && b <= 0); // Prints: -1 (as expected)
WScript.Echo(b == 0); // Prints: 0 (!!!)

शून्य 0 हो जाता है जब अंकगणितीय अभिव्यक्तियों या संख्यात्मक तुलना में उपयोग किया जाता है - समान रूप से असत्य के लिए , यह मूल रूप से एक विशेष प्रकार का "शून्य" है। अपरिभाषित , दूसरी ओर, एक सच्चा "कुछ भी नहीं" है और जब आप इसे संख्यात्मक संदर्भ में उपयोग करने का प्रयास करते हैं तो NaN ("संख्या नहीं") बन जाता है।

ध्यान दें कि अशक्त और अपरिभाषित एक विशेष उपचार प्राप्त करते हैं ==और !=ऑपरेटरों से, लेकिन आप अभिव्यक्ति के साथ और बी की सही संख्यात्मक समानता का परीक्षण कर सकते हैं (a >= b && a <= b)


8

tl; डॉ

nullएक चर सेट के लिए उपयोग करें जिसे आप जानते हैं कि यह एक वस्तु है।

undefinedएक वैरिएबल सेट के लिए उपयोग करें जिसका प्रकार मिश्रित है।


यह दोनों 5 पुरातन और ऑब्जेक्ट प्रकार के अपने उपयोग है, और उस «उपयोग के मामले» के बीच के अंतर को समझाने undefinedया null

तार

यदि आप जानते हैं कि एक चर केवल एक स्ट्रिंग है जबकि सभी जीवनचक्र, सम्मेलन द्वारा, आप इसे आरंभ कर सकते हैं "":

("") ? true : false; // false
typeof ""; // "string";
("Hello World") ? true : false; // true
typeof "Hello World"; // "string"

संख्या

यदि आप जानते हैं कि एक चर केवल एक संख्या है, जबकि सभी जीवनचक्र, सम्मेलन द्वारा, आप इसे आरंभ कर सकते हैं, 0(या NaNयदि 0आपके उपयोग में कोई महत्वपूर्ण मूल्य है):

(0) ? true : false; // false
typeof 0; // "number";
(16) ? true : false; // true
typeof 16; // "number"

या

(NaN) ? true : false; // false
typeof NaN; // "number";
(16) ? true : false; // true
typeof 16; // "number"

बूलियन

यदि आप जानते हैं कि एक चरवाहा केवल एक बूलियन है, जबकि सभी जीवनचक्र, सम्मेलन द्वारा, आप इसे आरंभ कर सकते हैं false:

(false) ? true : false; // false
typeof false; // "boolean";
(true) ? true : false; // true
typeof true; // "boolean"

वस्तु

यदि आप जानते हैं कि एक चर केवल एक वस्तु है जबकि सभी जीवनचक्र, सम्मेलन द्वारा, आप इसे आरंभ कर सकते हैं null:

(null) ? true : false; // false
typeof null; // "object";
({}) ? true : false; // true
typeof {}; // "object"

नोट: अशक्त से स्मार्ट उपयोग एक वस्तु का मिथ्या संस्करण है क्योंकि एक वस्तु हमेशा होती है true, और क्योंकि typeof nullवापसी होती है object। इसका मतलब है कि typeof myVarObjectऑब्जेक्ट और अशक्त दोनों प्रकार के लिए लगातार मूल्य वापसी।

सब

यदि आप जानते हैं कि एक चर में एक मिश्रित प्रकार (किसी भी प्रकार के सभी जीवनचक्र) हैं, तो सम्मेलन द्वारा, आप इसे आरंभ कर सकते हैं, को undefined


7

nullएक विशेष मूल्य है जिसका अर्थ है "कोई मूल्य नहीं"। nullएक विशेष वस्तु है क्योंकि typeof nullरिटर्न 'वस्तु' है।

दूसरी ओर, undefinedइसका मतलब है कि चर घोषित नहीं किया गया है, या एक मूल्य नहीं दिया गया है।


2
यह नोट करना महत्वपूर्ण है, जबकि undefinedइसका मतलब यह हो सकता है कि एक चर घोषित नहीं किया गया है, लेकिन इसकी गारंटी नहीं है। एक चर के रूप में घोषित किया जा सकता है var thing;और यह इसके बराबर होगा undefined
यूरा

6

अंतर को समझने का सबसे अच्छा तरीका यह है कि आप सबसे पहले जावास्क्रिप्ट के आंतरिक कामकाज के बारे में अपने दिमाग को साफ करें और केवल बीच के अंतर को समझें:

let supervisor = "None"
    // I have a supervisor named "None"

let supervisor = null
    // I do NOT have a supervisor. It is a FACT that I do not.

let supervisor = undefined
    // I may or may not have a supervisor. I either don't know
    // if I do or not, or I am choosing not to tell you. It is
    // irrelevant or none of your business.

इन तीन मामलों के बीच अर्थ में अंतर है, और जावास्क्रिप्ट बाद के दो मामलों को दो अलग-अलग मूल्यों के साथ अलग करता है, nullऔर undefined। आप उन अर्थों को व्यक्त करने के लिए उन मूल्यों का स्पष्ट रूप से उपयोग करने के लिए स्वतंत्र हैं।

तो जावास्क्रिप्ट-विशिष्ट मुद्दों में से कुछ क्या हैं जो इस दार्शनिक आधार के कारण उत्पन्न होते हैं?

  1. एक प्रारंभिक चर के बिना घोषित चर का मूल्य मिलता है undefinedक्योंकि आपने कभी भी इस बारे में कुछ नहीं कहा था कि इच्छित मूल्य क्या था।

    let supervisor;
    assert(supervisor === undefined);
  2. एक वस्तु की एक संपत्ति जो कभी भी निर्धारित नहीं की गई है undefinedक्योंकि किसी ने कभी भी उस संपत्ति के बारे में कुछ नहीं कहा।

    const dog = { name: 'Sparky', age: 2 };
    assert(dog.breed === undefined);
  3. nullऔर undefinedएक दूसरे के लिए "समान" हैं क्योंकि ब्रेंडन ईच ने ऐसा कहा। लेकिन वे सशक्त रूप से एक दूसरे के बराबर नहीं हैं।

    assert(null == undefined);
    assert(null !== undefined);
  4. nullऔर undefinedशुक्र है कि विभिन्न प्रकार हैं। nullप्रकार के अंतर्गत आता है Nullऔर undefinedप्रकार के लिए Undefined। यह कल्पना में है, लेकिन आपको यह कभी नहीं पता होगा कि typeofअजीबता के कारण जो मैं यहां नहीं दोहराऊंगा।

  5. एक स्पष्ट वापसी बयान के बिना अपने शरीर के अंत तक पहुंचने वाला एक फ़ंक्शन रिटर्न करता है, undefinedक्योंकि आपको इसके बारे में कुछ भी पता नहीं है कि यह क्या लौटा।

वैसे, जावास्क्रिप्ट में "शून्यता" के अन्य रूप हैं (यह दर्शनशास्त्र का अध्ययन करने के लिए अच्छा है ....)

  • NaN
  • एक चर का उपयोग करना जिसे कभी घोषित नहीं किया गया है और प्राप्त करना ReferenceError
  • अपने अस्थायी मृत क्षेत्र में letया constपरिभाषित स्थानीय चर का उपयोग करना और प्राप्त करनाReferenceError
  • विरल सरणियों में खाली कोशिकाएँ। हां ये नहीं हैं undefinedहालांकि वे ===अपरिभाषित की तुलना करते हैं।

    $ node
    > const a = [1, undefined, 2]
    > const b = [1, , 2]
    > a
    [ 1, undefined, 2 ]
    > b
    [ 1, <1 empty item>, 2 ]

सबसे बढ़िया उत्तर! अधिकांश उत्तर इस तथ्य को नजरअंदाज कर देते हैं कि आप किसी चर के मान कोundefined , जैसे कि let supervisor = undefinedमामले में परिभाषित कर सकते हैं
जे। ब्रुनी

धन्यवाद, और हाँ, यह ग़लतफ़हमी कि कोई चीज़ undefinedकेवल तभी है जब उसे घोषित नहीं किया गया है या उसे अभी तक कोई मूल्य नहीं दिया गया है, वह बहुत ही विकट है और लोगों के बीच पहुँचना वास्तव में कठिन है (हालाँकि मैं कोशिश करता रहता हूँ)। इतने सारे लोग दोनों होने के लिए जावास्क्रिप्ट कचरा nullऔर undefinedलेकिन ये मान है पूरी तरह से अलग अर्थ है और अधिकांश भाग के लिए वे अपने इच्छित अर्थ (बेशक IMHO) के साथ अच्छी तरह से काम करते हैं।
रे तोल

5

JavasSript में 5 आदिम डेटा प्रकार हैं स्ट्रिंग, संख्या, बूलियन, अशक्त और अपरिभाषित। मैं कुछ सरल उदाहरण के साथ समझाने की कोशिश करूंगा

हम एक सरल कार्य करते हैं

 function test(a) {

     if(a == null){
        alert("a is null");
     } else {
        alert("The value of a is " + a);
     }
  }

उपरोक्त फ़ंक्शन में भी यदि (a = null) समान है जैसे कि (a)

अब जब हम पैरामीटर को पास किए बिना इस फ़ंक्शन को कॉल करते हैं

   test(); it will alert "a is null";
   test(4); it will alert "The value of a is " + 4;

भी

var a;
alert(typeof a); 

यह अपरिभाषित देगा; हमने एक चर घोषित किया है, लेकिन हमने इस चर के लिए कोई मूल्य नहीं दिया है; लेकिन अगर हम लिखते हैं

var a = null;
alert(typeof a); will give alert as object

इसलिए अशक्त वस्तु है। एक तरह से हमने 'a' को एक मान दिया है


प्रतीक एक नया आदिम प्रकार है :)
अलेक्जेंडर मिल्स

4

के लिए undefinedप्रकार, वहाँ एक और केवल एक मूल्य है: undefined

के लिए nullप्रकार, वहाँ एक और केवल एक मूल्य है: null

तो उन दोनों के लिए, लेबल इसका प्रकार और उसका मूल्य दोनों है।

उनके बीच का अंतर। उदाहरण के लिए:

  • null एक खाली मूल्य है
  • undefined एक लापता मूल्य है

या:

  • undefined अभी तक कोई मान नहीं है
  • null एक मूल्य था और अब नहीं है

दरअसल, nullएक विशेष कीवर्ड है , पहचानकर्ता नहीं है और इस तरह आप इसे असाइन करने के लिए एक चर के रूप में नहीं मान सकते हैं।

हालाँकि, undefinedएक पहचानकर्ता है । हालांकि, non-strictमोड और strictमोड दोनों में , आप अपरिभाषित नाम का एक स्थानीय चर बना सकते हैं। लेकिन यह एक भयानक विचार है!

function foo() {
    undefined = 2; // bad idea!
}

foo();

function foo() {
    "use strict";
    undefined = 2; // TypeError!
}

foo();

4

जब आप जावास्क्रिप्ट में एक चर घोषित करते हैं, तो इसे मान दिया जाता है undefined। इसका मतलब है कि चर अछूता है और भविष्य में किसी भी मूल्य को सौंपा जा सकता है। इसका अर्थ यह भी है कि आप यह नहीं जानते हैं कि घोषणा के समय यह चर धारण करने वाला है।

अब आप स्पष्ट रूप से एक चर असाइन कर सकते हैं null। इसका अर्थ है कि चर का कोई मूल्य नहीं है। उदाहरण के लिए - कुछ लोगों के पास एक मध्य नाम नहीं है। तो इस तरह के मामले में किसी व्यक्ति वस्तु के मिडललेन वैरिएबल के लिए वैल्यू नल असाइन करना बेहतर होता है।

अब मान लीजिए कि कोई व्यक्ति आपके व्यक्ति ऑब्जेक्ट के मिडिलनेम चर पर पहुंच रहा है और इसका मूल्य है undefined। उसे पता नहीं होगा कि क्या डेवलपर इस वैरिएबल को इनिशियलाइज़ करना भूल गया है या यदि उसका कोई मूल्य नहीं है। यदि इसका मूल्य है null, तो उपयोगकर्ता आसानी से अनुमान लगा सकता है कि मिडिलनेम का कोई मूल्य नहीं है और यह एक अछूता चर नहीं है।


3

अशक्त और अपरिभाषित दोनों का उपयोग कुछ मूल्य की अनुपस्थिति को दर्शाने के लिए किया जाता है।

var a = null;

a प्रारंभिक और परिभाषित है।

typeof(a)
//object

null जावास्क्रिप्ट में एक ऑब्जेक्ट है

Object.prototype.toString.call(a) // [object Object]

var b;

b अपरिभाषित और असंक्रमित है

अपरिभाषित वस्तु गुण भी अपरिभाषित हैं। उदाहरण के लिए "x" को ऑब्जेक्ट c पर परिभाषित नहीं किया गया है और यदि आप cx तक पहुंचने का प्रयास करते हैं, तो यह अपरिभाषित हो जाएगा।

आम तौर पर हम अशक्त को अशक्त नहीं असाइन करते हैं।


1
Object.prototype.toString.call(null); // "[object Null]"
पॉल एस।

3

इस विषय पर रायन मॉर का संपूर्ण लेख ...

"आम तौर पर, अगर आपको किसी वैरिएबल या प्रॉपर्टी को नॉन-वैल्यू असाइन करने की जरूरत है, तो इसे फंक्शन में पास करें, या किसी फंक्शन से लौटाएं। नल लगभग हमेशा बेस्ट ऑप्शन है। इसे सीधे शब्दों में कहें, तो जावास्क्रिप्ट को अपरिभाषित और प्रोग्रामर का उपयोग करना चाहिए। अशक्त उपयोग करें। "

देखें अशक्त और अपरिभाषित की अनन्त रसातल तलाश


3

जावास्क्रिप्ट में अशक्त और अपरिभाषित दोनों मूल्य के अभाव को इंगित करते हैं।

var a = null; //variable assigned null value
var b;  // undefined

इस तथ्य के बावजूद कि मूल्य की अनुपस्थिति के लिए दोनों मौजूद हैं: लेकिन अपरिभाषित वास्तव में इसका मतलब है कि चर को आरंभीकृत नहीं किया गया है। ऐसे फ़ंक्शंस जो कुछ भी नहीं लौटाते और फ़ंक्शन मान जिसके लिए कोई मान आपूर्ति नहीं की जाती है, अपरिभाषित मान लौटाया जाता है। अशक्त और अपरिभाषित के बीच अंतर करने के लिए सख्त समानता ऑपरेटर === का उपयोग करें।

संदर्भ: http://www.thesstech.com/javascript/null-and-undefined


3

ठीक है, हम उलझन में हो सकता है हो जब हम के बारे में सुनने nullऔर undefinedहै, लेकिन चलो शुरू यह सरल, वे दोनों कर रहे हैं falsy और कई मायनों में समान है, लेकिन जावास्क्रिप्ट का अजीब हिस्सा है, उन्हें महत्वपूर्ण मतभेद की एक जोड़ी बनाने के लिए, उदाहरण के लिए, typeof null है 'object'जबकि typeof undefined है 'undefined'

typeof null; //"object"
typeof undefined; //"undefined";

लेकिन अगर आप उन्हें ==नीचे की तरह देखते हैं, तो आप देखते हैं कि वे दोनों झूठे हैं :

null==undefined; //true

इसके अलावा, आप nullएक वस्तु संपत्ति या एक आदिम के लिए असाइन कर सकते हैं , जबकि undefinedबस कुछ भी नहीं असाइन करके प्राप्त किया जा सकता है।

मैं आपके लिए एक नज़र में अंतर दिखाने के लिए एक त्वरित छवि बनाता हूं।

अशक्त और अनिर्धारित


2

जैसा कि टाइपो अपरिभाषित लौटता है, अपरिभाषित एक प्रकार है जहां अशक्त है एक आरंभिक चर इंगित करता है कि कोई वस्तु नहीं है (लगभग जावास्क्रिप्ट में सब कुछ एक वस्तु है)।


2

जावास्क्रिप्ट में सभी चर कुंजी मूल्य जोड़े के रूप में संग्रहीत किए जाते हैं। प्रत्येक चर को variable_name: variable_value / संदर्भ के रूप में संग्रहीत किया जाता है ।

अपरिभाषित का अर्थ है कि चर को स्मृति में स्थान दिया गया है, लेकिन इसका कोई मूल्य नहीं दिया गया है। सर्वोत्तम अभ्यास के रूप में, आपको असाइनमेंट के रूप में इस प्रकार का उपयोग नहीं करना चाहिए।

उस स्थिति में जब कोड में बाद के बिंदु पर एक चर बिना मूल्य के होना चाहते हैं तो कैसे निरूपित करें? आप प्रकार नल का उपयोग कर सकते हैं , जो एक प्रकार भी है जिसका उपयोग उसी चीज़ को परिभाषित करने के लिए किया जाता है, मान का अभाव, लेकिन यह अपरिभाषित के समान नहीं है, क्योंकि इस मामले में आपके पास वास्तव में स्मृति में मूल्य है। वह मान शून्य है

दोनों समान हैं लेकिन उपयोग और अर्थ अलग हैं।


2

मैं बीच में एक बहुत ही सूक्ष्म अंतर जोड़ना चाहता हूं nullऔर undefinedयह जानना अच्छा है कि आप मैदान से वेनिला जावास्क्रिप्ट (जेएस) सीखने की कोशिश कर रहे हैं:

  • nullजेएस में एक आरक्षित कीवर्ड है जबकि आपके undefinedद्वारा चलाए जा रहे रन-टाइम वातावरण की वैश्विक वस्तु पर एक चर है।

कोड लिखते समय, यह अंतर दोनों के रूप में पहचाने जाने योग्य नहीं है nullऔर undefinedहमेशा एक जावास्क्रिप्ट स्टेटमेंट के आरएचएस में उपयोग किया जाता है। लेकिन जब आप उन्हें अभिव्यक्ति के एलएचएस में उपयोग करते हैं तो आप इस अंतर को आसानी से देख सकते हैं। इसलिए जेएस दुभाषिया निम्न कोड को त्रुटि के रूप में व्याख्या करता है:

var null = 'foo'

यह नीचे त्रुटि देता है:

बिना पढ़ा हुआ वाक्यविन्यास: अप्रत्याशित टोकन अशक्त

हालांकि नीचे कोड सफलतापूर्वक चलता है, हालांकि मैं वास्तविक जीवन में ऐसा करने की सिफारिश नहीं करूंगा:

var undefined = 'bar'

यह काम करता है क्योंकि undefinedवैश्विक ऑब्जेक्ट (क्लाइंट-साइड JS के मामले में ब्राउज़र विंडो ऑब्जेक्ट) पर एक चर है


1
undefined='bar'वास्तव में undefined(जो अपरिवर्तनीय है) किसी भी मूल्य को निर्दिष्ट नहीं करता है , यह सिर्फ एक त्रुटि को भ्रमित नहीं करता है।
दिमित्री जैतसेव

1

के बीच अंतर undefinedऔर nullन्यूनतम है, लेकिन एक अंतर है। एक वैरिएबल जिसकी वैल्यू undefinedको कभी इनिशियलाइज़ नहीं किया गया है। एक चर जिसका मूल्य nullस्पष्ट रूप से एक मान दिया गया था null, जिसका अर्थ है कि चर का स्पष्ट रूप से कोई मूल्य नहीं है। आप की तुलना undefinedऔर nullका उपयोग करके null==undefinedअभिव्यक्ति, वे बराबर हो जाएगा।


यह उत्तर भ्रामक है ... स्वीकृत उत्तर में चर्चा देखें। लब्बोलुआब यह है - null==undefinedहै trueकेवल अंतर्निहित कास्टिंग (या जे एस में बराबर अवधि) की वजह से। जाहिर है, null===undefinedहै falseक्योंकि का उपयोग करते समय आप का उपयोग ===यह तुलना प्रकार में अच्छी तरह से।
मसराद

1

मूल रूप से, अनिर्धारित एक वैश्विक चर है जिसे जावास्क्रिप्ट रन टाइम पर बनाता है चाहे अशक्त का मतलब है कि चर को कोई मूल्य नहीं दिया गया है (वास्तव में अशक्त स्वयं एक वस्तु है)।

आइए एक उदाहरण लेते हैं:

        var x;  //we declared a variable x, but no value has been assigned to it.
        document.write(x) //let's print the variable x

यह निर्धारित है कि आपको आउटपुट के रूप में क्या मिलेगा।

अभी,

        x=5;
        y=null;
        z=x+y;

और आपको आउटपुट के रूप में 5 मिलेंगे । यह अपरिभाषित और अशक्त के बीच मुख्य अंतर है


1

null - यह एक असाइनमेंट वैल्यू है, जिसका उपयोग वेरिएबल के साथ किया जाता है, जिसका कोई मूल्य नहीं है (यह एक ऑब्जेक्ट है)।

अपरिभाषित - यह एक ऐसा चर है जिसका कोई मान निर्दिष्ट नहीं है, इसलिए जावास्क्रिप्ट इसे अपरिभाषित करेगा (यह एक डेटा प्रकार है)।

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


1

इसकी जांच करें। आउटपुट हजार शब्दों का है।

var b1 = document.getElementById("b1");

checkif("1, no argument"                        );
checkif("2, undefined explicitly",     undefined);
checkif("3, null explicitly",               null);
checkif("4, the 0",                            0);
checkif("5, empty string",                    '');
checkif("6, string",                    "string");
checkif("7, number",                      123456);

function checkif (a1, a2) {
	print("\ncheckif(), " + a1 + ":");
	if (a2 == undefined) {
		print("==undefined:    YES");
	} else {
		print("==undefined:    NO");
	}
	if (a2 === undefined) {
		print("===undefined:   YES");
	} else {
		print("===undefined:   NO");
	}
	if (a2 == null) {
		print("==null:         YES");
	} else {
		print("==null:         NO");
	}
	if (a2 === null) {
		print("===null:        YES");
	} else {
		print("===null:        NO");
	}
	if (a2 == '') {
		print("=='':           YES");
	} else {
		print("=='':           NO");
	}
	if (a2 === '') {
		print("==='':          YES");
	} else {
		print("==='':          NO");
	}
	if (isNaN(a2)) {
		print("isNaN():        YES");
	} else {
		print("isNaN():        NO");
	}
	if (a2) {
		print("if-?:           YES");
	} else {
		print("if-?:           NO");
	}
		print("typeof():       " + typeof(a2));
}

function print(v) {
	b1.innerHTML += v + "\n";
}
<!DOCTYPE html>
<html>
<body>
<pre id="b1"></pre>
</body>
</html>

यह सभी देखें:

चीयर्स!


1
इससे मैंने वास्तव में उस isNaN(null)रिटर्न को सीखा false- जिसने मुझे आश्चर्यचकित किया।
जे। ब्रुनी

0

दोनों विशेष मूल्य एक खाली स्थिति का अर्थ है।

मुख्य अंतर यह है कि अपरिभाषित एक वैरिएबल के मूल्य का प्रतिनिधित्व करता है जो अभी तक आरंभीकृत नहीं किया गया था, जबकि अशक्त किसी वस्तु की जानबूझकर अनुपस्थिति का प्रतिनिधित्व करता है।

हालांकि, चर संख्या को परिभाषित नहीं किया गया है, लेकिन प्रारंभिक मूल्य के साथ असाइन नहीं किया गया है:

let number;
number; // => undefined

संख्या चर अपरिभाषित है, जो स्पष्ट रूप से एक असिंचित चर दर्शाता है

गैर-मौजूदा ऑब्जेक्ट प्रॉपर्टी एक्सेस होने पर समान अनिनिर्धारित अवधारणा होती है:

const obj = { firstName: 'Dmitri' };
obj.lastName; // => undefined

क्योंकि lastName गुण obj में मौजूद नहीं है, जावास्क्रिप्ट सही ढंग से अपरिभाषित करने के लिए obj.lastName का मूल्यांकन करता है।

अन्य मामलों में, आप जानते हैं कि एक चर एक वस्तु को वापस लेने के लिए एक वस्तु या फ़ंक्शन रखने की उम्मीद करता है। लेकिन किसी कारण से, आप ऑब्जेक्ट को तुरंत नहीं कर सकते। ऐसे मामले में अशक्त गायब वस्तु का एक सार्थक सूचक है।

उदाहरण के लिए, क्लोन () एक फ़ंक्शन है जो एक सादे जावास्क्रिप्ट ऑब्जेक्ट को क्लोन करता है। फ़ंक्शन से ऑब्जेक्ट वापस करने की उम्मीद की जाती है:

function clone(obj) {
  if (typeof obj === 'object' && obj !== null) {
    return Object.assign({}, obj);
  }
  return null;
}
clone({name: 'John'}); // => {name: 'John'}
clone(15);             // => null
clone(null);           // => null

हालांकि, क्लोन () को एक गैर-वस्तु तर्क के साथ लागू किया जा सकता है: 15 या अशक्त (या आमतौर पर एक आदिम मूल्य, अशक्त या अपरिभाषित)। ऐसे मामले में, फ़ंक्शन एक क्लोन नहीं बना सकता है, इसलिए यह अशक्त - एक लापता वस्तु का संकेतक देता है।

टाइपो ऑपरेटर दो मूल्यों के बीच अंतर करता है:

typeof undefined; // => 'undefined'
typeof null;      // => 'object'

सख्त गुणवत्ता ऑपरेटर === सही ढंग से अशक्त से अलग नहीं करता है:

let nothing = undefined;
let missingObject = null;
nothing === missingObject; // => false

0

एक अलग अर्थ के अलावा अन्य अंतर हैं:

  1. इन दो मूल्यों के लिए वस्तु विनाशकारी अलग तरीके से काम करता है:
    const { a = "default" } = { a: undefined }; // a is "default"
    const { b = "default" } = { b: null };      // b is null
  2. JSON.stringify () रहता है nullलेकिन चूक जाता हैundefined
    const json = JSON.stringify({ undefinedValue: undefined, nullValue: null });
    console.log(json); // prints {"nullValue":null}
  3. टाइपो ऑपरेटर
    console.log(typeof undefined); // "undefined"
    console.log(typeof null);      // "object" instead of "null"

-2

यदि एक चर को प्रारंभ नहीं किया जाता है तो यह अपरिभाषित है। अपरिभाषित कोई वस्तु नहीं है। उदाहरण: var MyName; कंसोल.लॉग (टाइपो मायनेम);

विकास उपकरण में कंसोल लॉग की जांच करें, इसे अपरिभाषित के रूप में मुद्रित किया जाएगा।

null is a object.If अगर आप चाहते हैं कि कुछ वेरिएबल null हो तो null का उपयोग किया जाता है। null वेरिएबल मौजूद है, लेकिन वैल्यू ज्ञात नहीं है। इसे वेरिएबल प्रो को व्याकरणिक रूप से असाइन किया जाना चाहिए। नल स्वचालित रूप से आरंभिक नहीं है।

उदाहरण: var MyName = null; कंसोल.लॉग (टाइपो मायनेम); विकास उपकरण में कंसोल लॉग की जाँच करें, यह एक ऑब्जेक्ट होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.