इग्नासियो वाज़केज़-अब्राम्स सही है, लेकिन यह देखने देता है कि यह कैसे काम करता है ...
से 15.1.2.2 parseInt (string , radix)
:
जब parseInt फ़ंक्शन को बुलाया जाता है, तो निम्नलिखित कदम उठाए जाते हैं:
- इनपुटस्ट्रीमिंग को ToString (स्ट्रिंग) होने दें।
- बता दें कि S पहले इनपुटस्ट्रीमिंग का एक नया बनाया गया विकल्प है जिसमें पहले वर्ण से बना हुआ है जो कि स्ट्राइटहेसस्पेस और उस चरित्र का अनुसरण करने वाले सभी वर्ण नहीं है। (दूसरे शब्दों में, प्रमुख सफेद स्थान को हटा दें।)
- संकेत 1 होने दो।
- यदि S खाली नहीं है और S का पहला वर्ण माइनस साइन है -, साइन −1 होने दें।
- यदि S खाली नहीं है और S का पहला वर्ण एक प्लस चिन्ह + या एक ऋण चिन्ह है -, तो S से पहले वर्ण को हटा दें।
- आज्ञा देना = ToInt32 (मूलांक)।
- स्ट्रिपरेपिक्स को सच होने दें।
- यदि R, 0 है, तो a। यदि आर <2 या आर> 36 है, तो NaN लौटें। ख। यदि R। 16 है, तो पट्टीप्रिफ़िक्स को गलत होने दें।
- एल्स, आर = 0 ए। आर = 10 दें।
- यदि स्ट्रिपरेपिक्स सच है, तो ए। यदि S की लंबाई कम से कम 2 है और S के पहले दो अक्षर या तो "0x" या "0X" हैं, तो S से पहले दो अक्षर हटा दें और R = 16 होने दें।
- यदि S में कोई ऐसा वर्ण है, जो मूलांक-R अंक नहीं है, तो Z को पहले ऐसे वर्ण से पहले सभी वर्णों से मिलकर S का विकल्प दें; अन्यथा, Z को S होने दें।
- यदि Z खाली है, तो NaN लौटें।
- बता दें कि मैथेमैटिकल गणितीय पूर्णांक मान है जो कि मूलांक-आर संकेतन में Z द्वारा दर्शाया गया है, जो AZ और az के लिए अंकों का उपयोग करता है, जिसमें मान 10 से 35 के माध्यम से होते हैं। (हालाँकि, यदि R 10 है और Z में 20 से अधिक महत्वपूर्ण अंक हैं, तो हर महत्वपूर्ण अंक 20 वीं के बाद अंकों को 0 अंक द्वारा लागू किया जा सकता है, कार्यान्वयन के विकल्प पर; और यदि R 2, 4, 8, 10, 16 या 32 नहीं है, तो mathInt गणितीय पूर्णांक के लिए कार्यान्वयन-निर्भर सन्निकटन हो सकता है मान जो कि मूलांक-आर संकेतन में Z द्वारा दर्शाया गया है।)
- गणित के लिए संख्या मान होने दें।
- वापसी साइन × नंबर।
नोट parseInt केवल एक पूर्णांक मान के रूप में स्ट्रिंग के एक प्रमुख हिस्से की व्याख्या कर सकता है; यह किसी भी वर्ण को अनदेखा करता है जिसे किसी पूर्णांक के अंकन के भाग के रूप में व्याख्यायित नहीं किया जा सकता है, और ऐसा कोई संकेत नहीं दिया गया है कि ऐसे किसी वर्ण की उपेक्षा की गई थी।
यहाँ दो महत्वपूर्ण भाग हैं। मैंने दोनों को बोल्ड किया। इसलिए सबसे पहले, हमें यह पता लगाना होगा कि toString
प्रतिनिधित्व क्या null
है। हमें Table 13 — ToString Conversions
उस जानकारी के लिए खंड 9.8.0 को देखना होगा :
महान, इसलिए अब हम जानते हैं कि toString(null)
आंतरिक रूप से करने से एक 'null'
स्ट्रिंग पैदा होती है । महान, लेकिन यह वास्तव में कैसे अंक (वर्ण) को संभालता है जो प्रदान किए गए मूलांक के भीतर मान्य नहीं हैं?
हम ऊपर 15.1.2.2
देखते हैं और हम निम्नलिखित टिप्पणी देखते हैं:
यदि S में कोई ऐसा वर्ण है, जो मूलांक-R अंक नहीं है, तो Z को पहले ऐसे वर्ण से पहले सभी वर्णों से मिलकर S का विकल्प दें; अन्यथा, Z को S होने दें।
इसका मतलब है कि हम सभी अंकों को निर्दिष्ट मूलांक तक संभालते हैं और बाकी सब चीजों को नजरअंदाज करते हैं।
मूल रूप से, ऐसा parseInt(null, 23)
ही काम करना है parseInt('null', 23)
। u
का कारण बनता है दो l
's ध्यान नहीं दिया जा करने के लिए (भले ही वे मूलांक 23 का हिस्सा हैं)। इसलिए, हम केवल केवल पार्स कर सकते हैं n
, पूरे बयान को पर्यायवाची बना सकते हैं parseInt('n', 23)
। :)
किसी भी तरह से, महान सवाल!