2010-09-07 14 views
10

संभव डुप्लिकेट:
Null object in javascriptजावास्क्रिप्ट में एक वस्तु शून्य है?

हाय, मैं this thread जावास्क्रिप्ट में अशक्त के बारे में पढ़ा है, लेकिन मैं null की पहचान के बारे में अब बहुत उलझन में हूँ।

के रूप में यह ज्ञात है कि typeof(null)the language design error की वजह से object को मूल्यांकन करता है, और ECMA कहा गया है कि अशक्त The Null Type है।

8.2 The Null Type 
    The Null type has exactly one value, called null. 

तो क्यों लोग कह रखना कि null एक वस्तु है?

किसी ने कहा कि नल एक सिंगलटन ऑब्जेक्ट है। क्या यह सब जावास्क्रिप्ट में भी शून्य को कैसे देखता है?

+1

@ karim79 हां, मैंने उस धागे को पढ़ लिया है और मेरे प्रश्न को कुछ जवाबों पर टिप्पणी के रूप में रखा है, लेकिन प्रतिक्रिया नहीं मिली है, इसलिए मैंने इसे यहां उठाया है। धन्यवाद – c4il

+1

आपने उद्धरण के साथ स्वयं को उत्तर दिया। शून्य (एक मूल्य स्वयं का प्रतिनिधित्व करता है - के रूप में पढ़ें: "कुछ भी नहीं" - और शून्य === शून्य, सभी शून्य के लिए) नल प्रकार का एकमात्र कब्जा है। वास्तविक "ऑब्जेक्टनेस" जैसा कि आप इंगित करते हैं, तर्क के लिए खुला है, लेकिन शून्य की विशेषताएं इसे अधिक मूक बिंदु बनाती हैं। –

+0

आपका लिंक "भाषा डिज़ाइन त्रुटि" डगलस क्रॉकफ़ोर्ड - I (व्यक्तिगत रूप से) द्वारा एक दस्तावेज़ का संदर्भ देता है, यह सुझाव नहीं देगा कि वह सब कुछ लेता है जो वह शब्दशः कहता है। – Reinsbrain

उत्तर

10

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

नल वास्तव में एक सिंगलटन ऑब्जेक्ट नहीं है, क्योंकि इसे अस्वीकार करने से त्रुटि उत्पन्न होगी; for (var x in null) आपको एक त्रुटि देगा। सूचक दिनों के लिए वापस सोचो; शून्य एक सूचक था जब यह किसी ऑब्जेक्ट को इंगित नहीं कर रहा था।

+1

'के लिए (var x में शून्य); 'कई ब्राउज़रों पर फेंक नहीं देगा, हालांकि इसे कम से कम [3 संस्करण] पर निर्दिष्ट किया जाना चाहिए (http://bclary.com/2004/11/07/#a- 12.6.4) ईसीएमएस्क्रिप्ट का ('toObject' ऑपरेशन फेंक देगा जब मान' शून्य 'या' अपरिभाषित 'होगा)। लेकिन यह अब बदल गया है, अब [ईसीएमएस्क्रिप्ट 5] (http://www.ecma262-5.com/ELS5_HTML.htm#Section_12.6.4), अगर अभिव्यक्ति 'शून्य' या 'अपरिभाषित' है, तो कथन बस समाप्त होता है (एक सामान्य बयान पूरा करने)। – CMS

+1

एचटीएमएल प्रारूप पर अच्छा, ईसीएमए स्पेक। मैं उस समय की तलाश में था! :) – c4il

7

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

+0

उत्परिवर्तन का कोई वस्तु होने के साथ कुछ लेना देना नहीं है। EcmaScript 5 में ऑब्जेक्ट.फ्रीज़ देखें जो अपरिवर्तनीय वस्तुओं के निर्माण की अनुमति देता है। एक्मास्क्रिप्ट 3 में मूल वस्तुएं भी वस्तुएं हैं और अपरिवर्तनीय हो सकती हैं। नल एक वस्तु नहीं है क्योंकि यह किसी भी संदेश का जवाब नहीं दे सकता है - इसमें कोई गुण या विधियां नहीं हैं। यही कारण है कि (शून्य उदाहरण उदाहरण) सभी प्रकार के लिए गलत है। –

+1

@mikesamuel: मेरे उत्तर से "अपमानजनक" भाग हटा दिया गया है :) –

+0

* ऑब्जेक्ट की तरह * ऑब्जेक्ट्स के रूप में उपयोग करने का प्रयास करते समय प्राइमेटिव अस्थायी रूप से बॉक्स किए जाने का वर्णन करने के लिए गलत शब्द हो सकता है। – alex

1

null को ऑब्जेक्ट नहीं माना जा सकता क्योंकि इसमें गुण नहीं हो सकते हैं। यह एक प्राइमेटिव का प्रतिनिधित्व करने वाला एक कीवर्ड है, जैसे true और false

> true instanceof Object 
false 
> null instanceof Object 
false 
संबंधित मुद्दे