parseInt("")
NaN
है मानक कहते हैं क्योंकि बहुत भले ही +""
0
है बजाय (यह भी मानक तो कहते हैं, उदाहरण है कि "" == 0
के लिए जिसका अर्थ है बस क्योंकि)।
इसमें तर्क की तलाश न करें क्योंकि कोई गहरा गहरा तर्क नहीं है, बस इतिहास।
आप मेरी राय में एक बड़ी गलती कर रहे हैं ... जितनी जल्दी आप इसे बेहतर करेंगे, प्रोग्रामिंग जीवन के लिए जावास्क्रिप्ट के साथ बेहतर होगा। गलती यह है कि आप यह मान रहे हैं कि प्रोग्रामिंग भाषाओं में किए गए हर विकल्प और उनके बारे में हर तकनीकी विवरण तार्किक है। यह बिल्कुल सही नहीं है।
खासकर जावास्क्रिप्ट के लिए।
कृपया याद रखें कि जावास्क्रिप्ट को भीड़ में "डिजाइन" किया गया था और केवल भाग्य की वजह से, यह रात भर बेहद लोकप्रिय हो गया। इसने समुदाय को विवरणों के किसी भी गंभीर विचार से पहले इसे मानकीकृत करने के लिए मजबूर कर दिया और इसलिए मैदान पर किसी भी गंभीर परीक्षण से पहले यह मूल रूप से अपने वर्तमान दुखद राज्य में "जमे हुए" था।
भागों है कि इतना बुरा वे भी अजीब (जैसे with
बयान या ==
समानता ऑपरेटर कि इतने टूट गया है कि गंभीर js IDEs चेतावनी दी है इसके बारे में के बारे में कोई उपयोग नहीं कर रहे हैं कर रहे हैं: आप A==B
तरह बातें मिलता है, B==C
और A!=C
भी किसी भी "विशेष" मूल्य बिना सिर्फ सामान्य मूल्यों और का उपयोग कर null
, undefined
, NaN
या खाली स्ट्रिंग ""
और इसलिए नहीं कि सटीक समस्याओं की) की तरह।
बकवास विशेष मामले जावास्क्रिप्ट में हर जगह हैं और उन्हें लॉजिकल फ्रेम में रखने की कोशिश कर रहा है, दुर्भाग्य से, एक बर्बाद प्रयास है। बस बहुत कुछ पढ़कर और अपने द्वारा प्रदान किए जाने वाले शानदार रनटाइम पर्यावरण का आनंद लें (यह वह जगह है जहां जावास्क्रिप्ट वास्तव में चमकता है ... ब्राउज़र और उनके जेआईटी तकनीक का एक प्रभावशाली टुकड़ा है: आप कुछ लाइनें लिख सकते हैं और वास्तविक उपयोगी सॉफ्टवेयर चला सकते हैं विभिन्न कंप्यूटिंग उपकरणों के एक gajillion पर)।
आधिकारिक मानक जहां सभी विषमताएं गणना की जाती हैं, पढ़ने के लिए काफी कठिन है क्योंकि इसका लक्ष्य बहुत सटीक होना है, और दुर्भाग्य से नियमों को निर्दिष्ट करना वास्तव में जटिल है। उदाहरण क्या ES5 सिर्फ एक और अजीब "विशेष" मामले के लिए (Date
वस्तुओं के लिए जैसे ToPrimitive
आपरेशन व्यवहार) है के लिए में एक "सामान्य" मामला हो जाता है:
इसके अलावा भाषा लाभ और अधिक सुविधाओं के रूप में नियम भी अधिक से अधिक जटिल हो जाएगा ES6 (जहां ToPrimitive
अनुकूलित किया जा सकता है)।
यह सुनिश्चित नहीं है कि यह "सामान्यीकरण" कुछ खुश होने के लिए है ... असली समस्या जमे हुए शुरुआती बिंदु है और अब कोई आसान समाधान नहीं है (यदि आप सभी मौजूदा जावास्क्रिप्ट कोड को फेंकना नहीं चाहते हैं, अर्थात्)।
एक भाषा के लिए सामान्य मार्ग स्वच्छ और अच्छा और सममित और छोटा शुरू हो रहा है। फिर वास्तविक दुनिया की समस्याओं का सामना करते समय भाषा के लाभ (कुछ संक्रमित होते हैं) कुछ बदसूरत हिस्सों (क्योंकि दुनिया बदसूरत और असममित है)।
जावास्क्रिप्ट इस तरह है। सिवाय इसके कि यह अच्छा और साफ शुरू नहीं हुआ और इसके अलावा गेम में इसे फेंकने से पहले इसे पॉलिश करने का कोई समय नहीं था।
नीचे एक नंबर और स्ट्रिंग की तुलना है:
ठीक है, यह ठीक है कि इसे कैसे काम करने के लिए डिज़ाइन किया गया था। या शायद उस तरह से काम करने के लिए विकसित किया। किसी भी तरह से, इसे बदलने के लिए बहुत देर हो चुकी है। और दोनों तरीकों के लिए अच्छे उपयोग-मामले हैं। आपको बस उचित विकल्प चुनना होगा। – Thilo
यह भी ध्यान दें कि 'संख्या' फ़्लोटिंग-पॉइंट संख्याओं का भी समर्थन करता है, केवल पूर्णांक नहीं। – Thilo
आदर्श रूप से या नहीं, ऐसा नहीं है कि यह कैसे काम करता है। आप https://www.youtube.com/watch?v=FqhZZNUyVFM का आनंद ले सकते हैं हालांकि – pvg