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




null undefined (20)

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


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

जावास्क्रिप्ट के माध्यम से: परिभाषित गाइड


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

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

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

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


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

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

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

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

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

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

        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. अविकसित चर
  2. घोषित लेकिन असाइन किए गए चर
  3. शाब्दिक अपरिभाषित के साथ आवंटित चर
  4. शाब्दिक शून्य के साथ आवंटित चर
  5. वेरिएबल्स को अपरिभाषित या शून्य के अलावा किसी अन्य चीज़ के साथ असाइन किया गया है

निम्नलिखित में से प्रत्येक मामले में एक-एक करके बताया गया है

  1. अविकसित चर : निम्नलिखित अविकसित चर के लिए सच है

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

    • टाइपफ रिटर्न स्ट्रिंग 'अपरिभाषित'
    • == शून्य रिटर्न के साथ सही जांचें
    • == अपरिभाषित रिटर्न के साथ सही जांचें
    • === शून्य रिटर्न झूठी के साथ जांचें
    • === अपरिभाषित रिटर्न के साथ सही जांचें
    • अगर या सशर्त ऑपरेटर ? झूठी वापसी
  3. अक्षरशः अपरिभाषित के साथ आवंटित चर : इन चरों को समान रूप से अस्वीकृत लेकिन असाइन किए गए चर के रूप में माना जाता है।

  4. शाब्दिक शून्य के साथ आवंटित चर

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

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

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

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

आप प्रकार निर्धारित करने के लिए निम्न उपयोगिता फ़ंक्शन का भी उपयोग कर सकते हैं। यह वर्तमान में सभी ईसीएमए 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 
}

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

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

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


जावास्क्रिप्ट के साथ, वस्तुओं के लिए शून्य है, अपरिभाषित चर, गुण, और विधियों के लिए है।

शून्य होने के लिए, एक वस्तु को परिभाषित किया जाना चाहिए, अन्यथा यह अनिर्धारित होगा।

यदि आप परीक्षण करना चाहते हैं कि कोई ऑब्जेक्ट मौजूद है, तो ऑब्जेक्ट अपरिभाषित होने पर यह एक त्रुटि फेंक देगा:

गलत:

if (myObj !== null && typeof myObj !== "undefined") 

इसके कारण, आपको टाइपऑफ () पहले परीक्षण करना होगा:

सही बात:

if (typeof myObj !== "undefined" && myObj !== null) 

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

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

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

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


जावास्क्रिप्ट में, 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'

टाइपफॉफ रिटर्न अपरिभाषित के रूप में, अपरिभाषित एक प्रकार है जहां नल एक प्रारंभकर्ता है, वे किसी भी ऑब्जेक्ट को वेरिएबल पॉइंट इंगित करता है (जावास्क्रिप्ट में लगभग सबकुछ एक ऑब्जेक्ट है)।


मैं undefined , null और Uncaught ReferenceError :

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


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

अपरिभाषित मान एक आदिम मान होता है जब एक चर को मान निर्दिष्ट नहीं किया जाता है।

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

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

एक सबस्क्रिप्ट या सदस्य जो कभी अस्तित्व में नहीं पढ़ते समय आपको अपरिभाषित भी किया जाएगा।

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


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

var a = null;

एक प्रारंभ और परिभाषित किया गया है।

typeof(a)
//object

शून्य जावास्क्रिप्ट में एक वस्तु है

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

var b;

बी अपरिभाषित और अनियमित है

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

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


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

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

Source


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();

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

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

अविकसित - यदि परिवर्तनीय नहीं बनाया गया है तो इसे अविकसित के रूप में जाना जाता है।


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

जावास्क्रिप्ट में दूसरा मान भी है जो मूल्य की अनुपस्थिति को इंगित करता है। अपरिभाषित मूल्य गहरी तरह की अनुपस्थिति का प्रतिनिधित्व करता है। यह वैरिएबल का मान है जिसे प्रारंभ नहीं किया गया है और जब आप ऑब्जेक्ट प्रॉपर्टी या सरणी तत्व के मान से पूछते हैं तो वह मान जो मौजूद नहीं है। अपरिभाषित मान उन कार्यों द्वारा भी लौटाया जाता है जिनके पास कोई वापसी मूल्य नहीं है, और फ़ंक्शन पैरामीटर का मान जिसके लिए कोई तर्क प्रदान नहीं किया जाता है। अपरिभाषित एक पूर्वनिर्धारित वैश्विक चर है (नल की तरह कोई भाषा कीवर्ड नहीं) जिसे अपरिभाषित मान में प्रारंभ किया गया है। ईसीएमएस्क्रिप्ट 3 में, अपरिभाषित एक पढ़ा / लिखने वाला चर है, और इसे किसी भी मान पर सेट किया जा सकता है। यह त्रुटि ECMAScript 5 में ठीक की गई है और अनिर्धारित भाषा के उस संस्करण में केवल पढ़ने के लिए है। यदि आप टाइपफॉर्फ़ ऑपरेटर को अपरिभाषित मान पर लागू करते हैं, तो यह "अपरिभाषित" लौटाता है, यह दर्शाता है कि यह मान एक विशेष प्रकार का एकमात्र सदस्य है।

इन मतभेदों के बावजूद, शून्य और अपरिभाषित दोनों मूल्य की अनुपस्थिति को इंगित करते हैं और अक्सर एक दूसरे के लिए उपयोग किया जा सकता है। समानता ऑपरेटर == उन्हें बराबर मानता है। (सख्त समानता ऑपरेटर === का उपयोग उनको अलग करने के लिए करें।) दोनों झूठे मूल्य हैं-जब वे एक बूलियन मान की आवश्यकता होती है तो वे झूठी तरह व्यवहार करते हैं। न तो शून्य और न ही अपरिभाषित कोई गुण या विधियां हैं। वास्तव में, उपयोग कर रहे हैं। या [] किसी संपत्ति या इन मानों की विधि तक पहुंचने के लिए TypeError का कारण बनता है।

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


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

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

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

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

var foo;

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

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

और 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 

Just to add my views -

A variable that is declared only, and never used anywhere, is removed off by an optimizing compiler in case of compiled languages like C++[or a warning is flagged in the IDE]. It ultimately means that the variable is non-existent because it's memory is never allocated.

In case of javascript interpreter, [I guess] a variable is treated as existing only from the point onwards where it is given a value. Before that point, it's type is "undefined", and no memory is allocated for it. And, so its type is undefined.

A null in javascript is a value that represents an address, but that address points to nothing yet[non-existent reference]. Nevertheless, its a value.


Null is ALWAYS an unknown object that exists in memory, whereas undefined is not.





undefined