मैं जावास्क्रिप्ट अपरिभाषित और अशक्त के बारे में थोड़ा भ्रमित हूं।
के बारे में भ्रमित मत हो null
। यह आम तौर पर समझ में आता है और अन्य स्क्रिप्टिंग भाषाओं की आउट-ऑफ-बैंड 'null', 'nil' या 'none' ऑब्जेक्ट्स की अवधारणाओं के समान व्यवहार करता है।
undefined
दूसरी ओर, एक अजीब जावास्क्रिप्ट क्विक है। यह एक सिंगलटन ऑब्जेक्ट है जो आउट-ऑफ-बैंड मूल्यों का प्रतिनिधित्व करता है, अनिवार्य रूप से एक समान दूसरा-लेकिन-अलग null
। यह आता है:
जब आप function
कथन सूचियों में तर्क सूची की तुलना में कम तर्कों के साथ किसी फ़ंक्शन को कॉल करते हैं, तो अनपेक्षित तर्क सेट किए जाते हैं undefined
। आप उदाहरण के लिए उस के लिए परीक्षण कर सकते हैं।
function dosomething(arg1, arg2) {
if (arg2===undefined)
arg2= DEFAULT_VALUE_FOR_ARG2;
...
}
इस पद्धति से आप dosomething(1)
और के बीच का अंतर नहीं बता सकते हैं dosomething(1, undefined)
; arg2
दोनों में समान मूल्य होगा। यदि आपको उस अंतर को बताने की आवश्यकता है जिसे आप देख सकते हैं arguments.length
, लेकिन वैकल्पिक तर्क जैसे कि आमतौर पर बहुत पठनीय नहीं है।
जब कोई फ़ंक्शन नहीं होता है return value;
, तो वह वापस आ जाता है undefined
। आमतौर पर इस तरह के रिटर्न परिणाम का उपयोग करने की कोई आवश्यकता नहीं है।
जब आप var a
एक ब्लॉक में एक स्टेटमेंट होने पर एक वैरिएबल घोषित करते हैं , लेकिन अभी तक इसके लिए कोई वैल्यू नहीं दी गई है, तो यह है undefined
। फिर, आपको वास्तव में कभी भी उस पर भरोसा करने की आवश्यकता नहीं होनी चाहिए।
डरावना typeof
ऑपरेटर 'undefined'
तब लौटता है जब उसका ऑपरेंड एक साधारण चर होता है जो मौजूद नहीं होता है, एक त्रुटि को फेंकने के बजाय जैसा कि आप इसे संदर्भित करने की कोशिश करते हैं तो सामान्य रूप से होता है। (आप भी इसे कोष्ठक में लिपटे एक सरल चर दे सकते हैं, लेकिन नहीं है कि के लिए ज्यादा नहीं उपयोग या तो एक पूर्ण एक गैर existant चर शामिल अभिव्यक्ति।),।
यह विवादास्पद है। जब आप किसी ऐसी वस्तु की संपत्ति तक पहुँचते हैं जो मौजूद नहीं है, तो आपको तुरंत हर दूसरी भाषा की तरह त्रुटि नहीं मिलती है। इसके बजाय आपको एक undefined
वस्तु मिलती है । (और फिर जब आप उस undefined
ऑब्जेक्ट को बाद में स्क्रिप्ट में उपयोग करने का प्रयास करते हैं तो यह एक अजीब तरीके से गलत हो जाएगा कि नीचे ट्रैक करना बहुत मुश्किल है अगर जावास्क्रिप्ट ने सीधे एक त्रुटि फेंक दी थी।)
यह अक्सर गुणों के अस्तित्व की जांच करने के लिए उपयोग किया जाता है:
if (o.prop!==undefined) // or often as truthiness test, if (o.prop)
...do something...
हालाँकि, क्योंकि आप undefined
किसी अन्य मान की तरह असाइन कर सकते हैं :
o.prop= undefined;
यह वास्तव में नहीं पता करता है कि संपत्ति मज़बूती से वहाँ है। in
ऑपरेटर का उपयोग करने के लिए बेहतर है , जो जावास्क्रिप्ट के मूल नेटस्केप संस्करण में नहीं था, लेकिन अब हर जगह उपलब्ध है:
if ('prop' in o)
...
संक्षेप में, undefined
एक जावास्क्रिप्ट-विशिष्ट गड़बड़ है, जो सभी को भ्रमित करता है। वैकल्पिक फ़ंक्शन तर्कों के अलावा, जहां JS के पास कोई और अधिक सुरुचिपूर्ण तंत्र नहीं है, undefined
से बचा जाना चाहिए। इसे कभी भी भाषा का हिस्सा नहीं होना चाहिए था; null
केवल (2) और (3) के लिए ठीक काम किया होगा, और (4) एक मिसफिट है जो केवल मौजूद है क्योंकि शुरुआत में जावास्क्रिप्ट में कोई अपवाद नहीं था।
if (!testvar)
वास्तव में क्या करता है? क्या यह अपरिभाषित और अशक्त या सिर्फ अपरिभाषित के लिए परीक्षण करता है?
इस तरह की एक 'truthiness' के खिलाफ परीक्षण जाँच करता है false
, undefined
, null
, 0
, NaN
और रिक्त स्ट्रिंग। लेकिन इस मामले में, हाँ, यह वास्तव में undefined
इसके साथ संबंध है। IMO, इसके बारे में अधिक स्पष्ट होना चाहिए और कहना चाहिए if (testvar!==undefined)
।
एक बार एक चर को परिभाषित करने के बाद मैं इसे अपरिभाषित पर वापस साफ कर सकता हूं (इसलिए चर को हटाना)।
आप निश्चित रूप undefined
से इसे असाइन कर सकते हैं , लेकिन यह चर को नष्ट नहीं करेगा। केवलdelete object.property
ऑपरेटर वास्तव में चीजों को हटा देता है।
delete
वास्तव में इस तरह के चर के बजाय गुणों के लिए है। ब्राउजर्स आपको सीधे जाने देंगे delete variable
, लेकिन यह एक अच्छा विचार नहीं है और ECMAScript फिफ्थ एडिशन के सख्त मोड में काम नहीं करेगा। यदि आप किसी चीज के संदर्भ को मुक्त करना चाहते हैं, तो यह कचरा एकत्र किया जा सकता है, यह कहना अधिक सामान्य होगा variable= null
।
क्या मैं एक पैरामीटर के रूप में अपरिभाषित हो सकता हूं?
हाँ।