जावास्क्रिप्ट में निम्नलिखित को निष्पादित करने का प्रयास करें:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
मैंने सिर्फ इतना ही सीखा है कि जावास्क्रिप्ट को लगता है कि प्रमुख शून्य एक ऑक्टल पूर्णांक को इंगित करता है , और चूंकि कोई आधार "8"
या "9"
-8 नहीं है, इसलिए फ़ंक्शन शून्य हो जाता है। यह पसंद है या नहीं, यह डिजाइन द्वारा है ।
वर्कअराउंड क्या हैं?
नोट: पूर्णता के लिए, मैं एक समाधान पोस्ट करने वाला हूं, लेकिन यह एक ऐसा समाधान है, जिससे मुझे नफरत है, इसलिए कृपया अन्य / बेहतर उत्तर पोस्ट करें।
अपडेट करें:
जावास्क्रिप्ट मानक ( ECMA-262 ) के 5 वें संस्करण में एक ब्रेकिंग परिवर्तन होता है जो इस व्यवहार को समाप्त करता है। मोज़िला का अच्छा लेखन है ।
10
(दशमलव) जब तक कि पार्स करने के लिए संख्या के साथ उपसर्ग नहीं किया जाता है 0x
, उदाहरण के लिए 0xFF
, जिस स्थिति में बेस पैरामीटर डिफॉल्ट करता है 16. उम्मीद है कि एक दिन, यह समस्या दूर की स्मृति होगी।
+'08' === 8
? सच! हो सकता है कि आपको वास्तव में parseInt
अपने वास्तविक कोड की आवश्यकता हो , लेकिन उपरोक्त के लिए नहीं।
Number('08')
0
या undefined
और स्ट्रिंग की नंबर एक के साथ शुरू होता 0
है एक के बाद नहीं अंकों x
या X
, तो कार्यान्वयन, अपने विवेक से, संख्या या तो अष्टाधारी होने के रूप में या के रूप में किया जा रहा दशमलव व्याख्या कर सकते हैं। क्रियान्वयन दशमलव होने के रूप में इस मामले में संख्या व्याख्या करने के लिए प्रोत्साहित किया जाता है। " ( मेरा जोर)