इसका बेहतर नाम NaN, इसका अर्थ अधिक सटीक और कम भ्रमित रूप से वर्णन करना, एक संख्यात्मक अपवाद होगा । यह वास्तव में आदिम प्रकार (भाषा डिजाइन द्वारा) के रूप में प्रच्छन्न अपवाद वस्तु है, जहां एक ही समय में इसकी झूठी आत्म-तुलना में इसे आदिम नहीं माना जाता है। भ्रम की स्थिति। और जब तक भाषा "अपना मन नहीं बनाएगी" उचित अपवाद वस्तु और आदिम अंक के बीच चयन करने के लिए , भ्रम रहेगा।
NaNस्वयं की बदनाम गैर-बराबरी , दोनों ==और ===एक भ्रामक डिजाइन की अभिव्यक्ति है जो इस अपवाद वस्तु को एक आदिम प्रकार होने के लिए मजबूर करता है। यह मौलिक सिद्धांत को तोड़ता है कि एक आदिम विशिष्ट रूप से इसके मूल्य से निर्धारित होता है । यदि NaNअपवाद के रूप में देखा जाना पसंद किया जाता है (जिनमें से विभिन्न प्रकार के हो सकते हैं), तो इसे आदिम के रूप में "बेचा" नहीं जाना चाहिए। और अगर यह आदिम होना चाहता है, तो उस सिद्धांत को पकड़ना चाहिए। जब तक यह टूटा हुआ है, जैसा कि हमारे पास जावास्क्रिप्ट में है, और हम वास्तव में दोनों के बीच तय नहीं कर सकते हैं, इसमें शामिल सभी के लिए अनावश्यक संज्ञानात्मक भार के लिए भ्रम की स्थिति बनी रहेगी। हालांकि, वास्तव में दोनों के बीच का चुनाव करके इसे ठीक करना आसान है:
- या तो
NaNएक विशेष अपवाद वस्तु बनाएं जिसमें अपवाद कैसे उत्पन्न हुआ, इस जानकारी को फेंकने के विपरीत उपयोगी है जो वर्तमान में लागू की गई है, जिससे कठिन-से-डिबग कोड हो जाता है;
- या
NaNआदिम प्रकार की एक इकाई बनाते हैं number(जो कि कम भ्रमित रूप से "संख्यात्मक" कहा जा सकता है), जिस स्थिति में यह स्वयं के बराबर होना चाहिए और इसमें कोई अन्य जानकारी नहीं हो सकती है; उत्तरार्द्ध स्पष्ट रूप से एक अवर विकल्प है।
प्रकार NaNमें मजबूर करने का एकमात्र कल्पनीय लाभ numberइसे किसी भी संख्यात्मक अभिव्यक्ति में वापस फेंकने में सक्षम हो रहा है। जो, हालांकि, इसे भंगुर विकल्प बनाता है, क्योंकि किसी भी संख्यात्मक अभिव्यक्ति वाले परिणाम NaNया तो होंगे NaN, या अप्रत्याशित परिणामों के लिए अग्रणी होंगे , जैसे कि NaN < 0मूल्यांकन करना false, अर्थात booleanअपवाद रखने के बजाय वापस लौटना ।
और यहां तक कि अगर "चीजें वे जिस तरह से हैं", कुछ भी हमें अपने कोड के लिए उस स्पष्ट अंतर को बनाने से रोकता है, जिससे हमारे कोड को अधिक पूर्वानुमान और आसानी से डीबग करने में मदद मिल सके। व्यवहार में, इसका मतलब है कि उन अपवादों की पहचान करना और अपवाद के रूप में उनके साथ व्यवहार करना। जो, दुर्भाग्य से, अधिक कोड का मतलब है, लेकिन उम्मीद है कि टाइप-टाइप ऑफ़ फ़्लो टाइपाइप जैसे टूल द्वारा इसे कम किया जाएगा।
और फिर हमारे पास गन्दा शांत बनाम शोर उर्फ सिग्नलिंग NaNभेद है । जो वास्तव में इस बारे में है कि अपवादों को कैसे नियंत्रित किया जाता है, स्वयं अपवादों को नहीं, और अन्य अपवादों से अलग कुछ भी नहीं।
इसी तरह, Infinityऔर वास्तविक रेखा के विस्तार में उत्पन्न होने वाले संख्यात्मक प्रकार के+Infinity तत्व हैं लेकिन वे वास्तविक संख्या नहीं हैं। गणितीय रूप से, उन्हें वास्तविक संख्याओं के अनुक्रमों द्वारा प्रस्तुत किया जा सकता है जो या तो परिवर्तित होते हैं ।+-Infinity