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

क्यों नल "वस्तु" प्रकार है?

मैं 'वेब डेवलपर्स के अध्याय 4 के लिए व्यावसायिक जावास्क्रिप्ट' पढ़ रहा हूं और यह मुझे बताता है कि पांच प्रकार के प्राचीन हैं: अपरिभाषित, रिक्त, बुलियन, नंबर और स्ट्रिंग

यदि null एक आदिम है, तो typeof(null) "object" वापस क्यों आता है?

इसका मतलब यह नहीं होगा कि संदर्भ से null पारित किया जाता है (मैं मान रहा हूं कि सभी वस्तुओं को संदर्भ से पारित किया गया है), इसलिए यह एक आदिम नहीं बना रहा है?

वेब के समाधान से एकत्रित समाधान "क्यों नल "वस्तु" प्रकार है?"

जावास्क्रिप्ट के पहले कार्यान्वयन में, जावास्क्रिप्ट मूल्यों को एक प्रकार टैग और एक मान के रूप में दर्शाया गया था, वस्तुओं के लिए प्रकार टैग के साथ 0 , और null को NULL सूचक (अधिकांश प्लेटफ़ॉर्म पर 0x00 ) के रूप में दर्शाया गया था। नतीजतन, शून्य एक प्रकार टैग के रूप में 0 था, इसलिए बोगस टाइप typeof रिटर्न वेल्यू ( संदर्भ )।

  typeof null === 'object'; // This stands since the beginning of JavaScript 

एक "फिक्स" का प्रस्ताव ECMAScript (एक ऑप्ट-इन के माध्यम से) के लिए किया गया था। इसके परिणामस्वरूप होता है:

 typeof null === 'null' 

… लेकिन इस बदलाव को खारिज कर दिया गया था, इस विशिष्ट "छांटने" का उपयोग करके कोड के साथ समस्याओं के कारण, null परीक्षण करने के लिए।

यदि null एक आदिम है, तो typeof(null) "object" वापस क्यों आता है?

क्योंकि कल्पना इतना कहते हैं

11.4.3 ऑपरेटर के प्रकार

यूनियन एक्सपे्रेशन का उत्पादन: यूनानी एक्सपे्रेशन का प्रकार निम्नानुसार मूल्यांकन किया जाता है:

  1. वैर को यूनरी एक्सपेरशन के मूल्यांकन के परिणाम दें
  2. यदि प्रकार ( वैल ) संदर्भ है , तो फिर
    ए। यदि IsUnresolvableReference ( val ) सही है , तो " undefined " पर लौटें
    ख। मान दें GetValue ( Val )।
  3. तालिका 20 के अनुसार टाइप ( वाल ) के अनुसार निर्धारित स्ट्रिंग लौटें

यहां छवि विवरण दर्ज करें

जैसा कि इंगित किया गया है, कल्पना इसलिए कहते हैं लेकिन जावास्क्रिप्ट के कार्यान्वयन से ईसीएमएस्क्रिप्ट स्पेक के लेखन की भविष्यवाणी की जा रही है, और विनिर्देश सावधानीपूर्वक नहीं था कि प्रारंभिक कार्यान्वयन के फ़ाइबल्स को सही किया जाए, फिर भी यह एक वैध सवाल है कि यह पहली जगह में ऐसा क्यों किया गया है। डगलस क्रॉकरफोर्ड इसे एक गलती कहते हैं । किरो रिस्क यह सोचता है कि थोड़े सॉर्टा समझ में आता है :

इस के पीछे तर्क यह है कि undefined विपरीत, null , (और अभी भी होता है) अक्सर उपयोग किया जाता है जहां वस्तुओं दिखाई देती हैं। दूसरे शब्दों में, किसी वस्तु के रिक्त संदर्भ को चिन्हित करने के लिए अक्सर null का उपयोग किया जाता है जब ब्रेंडन इइच ने जावास्क्रिप्ट बना दिया, तो उन्होंने एक ही प्रतिमान का अनुसरण किया, और इसे "ऑब्जेक्ट" वापस करने के लिए (यकीनन) अर्थ दिया वास्तव में, ईसीएमएस्क्रिप्ट विनिर्देशन किसी भी ऑब्जेक्ट मान (ईसीएमए -262, 11.4.11) के जानबूझकर अनुपस्थिति को प्रस्तुत करने वाले आदिम मूल्य के रूप में null को परिभाषित करता है।

यदि null एक आदिम है, तो typeof(null) " object " वापस क्यों आता है?

संक्षेप में: यह ECMAScript में बग है, और प्रकार null होना चाहिए

संदर्भ: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null

पुस्तक से YDKJS

ये जेएस में एक लंबे समय से चलने वाला बग़ीब है, लेकिन जो कि कभी भी तय नहीं किया जा सकता है। वेब पर बहुत अधिक कोड बग पर निर्भर करता है और इस प्रकार यह तय करने से बहुत अधिक बग पैदा होंगे!