एक पुराने प्रश्न का उत्तर देने के लिए क्षमा करें, लेकिन जिस कारण से आपको अपरिभाषित और अशक्त दोनों की आवश्यकता है, वह सरल है: एक प्रोटोटाइप-आधारित डक-टाइपिंग भाषा में, आपको "इस ऑब्जेक्ट को X के लिए मान नहीं" और "इस ऑब्जेक्ट" X के बीच अंतर करना होगा। कुछ भी नहीं / बातिल / खाली "।
इस क्षमता के बिना प्रोटोटाइप श्रृंखला को चलाने का कोई तरीका नहीं है और इसलिए विरासत काम नहीं कर सकती है; आपको यह निर्धारित करने में सक्षम होना चाहिए कि obj.someProp अपरिभाषित है, इसलिए आप obj.prototype.someProp को देख सकते हैं, और जब तक आपको मूल्य नहीं मिल जाता है, तब तक श्रृंखला को आगे बढ़ा सकते हैं। अगर obj.someProp अशक्त हो गया, तो यह जानने का कोई तरीका नहीं होगा कि क्या यह वास्तव में अशक्त था या इसका मतलब था "मेरे प्रोटोटाइप को देखो"। इसके चारों ओर एकमात्र तरीका पर्दे के पीछे के कुछ जादू के जादू को इंजेक्ट करना है जो प्रोटोटाइप श्रृंखलाओं के साथ फ़ज़ करने की आपकी क्षमता को तोड़ता है और जेएस काले जादू के विभिन्न अन्य बिट्स को करता है।
बहुत से जावास्क्रिप्ट की तरह, अपरिभाषित और अशक्त का विचार पहली बार में विजयी और मूर्ख लगता है, फिर बाद में बिल्कुल शानदार (फिर से वापस पागल और बेवकूफ लेकिन एक उचित विवरण के साथ)।
यदि आप किसी ऐसी संपत्ति का उपयोग नहीं करते हैं, जो C # जैसी भाषा संकलित नहीं करेगी और अन्य गतिशील भाषाएं अक्सर रनटाइम पर अपवादों को फेंक देती हैं, जब आप ऐसी संपत्ति को छूते हैं जो अस्तित्व में नहीं होती है, जिसका अर्थ है कि आपको उनके लिए परीक्षण करने के लिए विशेष निर्माणों का उपयोग करना होगा। प्लस क्लासेस का मतलब है जब कोई वस्तु तुरंत तैयार की जाती है तो आपको पहले से ही इसकी विरासत श्रृंखला और इसके सभी गुणों के बारे में पता होता है - जेएस में मैं श्रृंखला के 15 चरणों में एक प्रोटोटाइप को संशोधित कर सकता हूं और जो परिवर्तन मौजूदा वस्तुओं पर दिखाई देंगे।
undefined
और कब करेंnull