मुझे जावास्क्रिप्ट में एक कष्टप्रद समस्या है ।
> parseInt(1 / 0, 19)
> 18
parseInt
फ़ंक्शन वापस क्यों आता है 18
?
मुझे जावास्क्रिप्ट में एक कष्टप्रद समस्या है ।
> parseInt(1 / 0, 19)
> 18
parseInt
फ़ंक्शन वापस क्यों आता है 18
?
जवाबों:
का नतीजा 1/0
है Infinity
।
parseInt
अपने पहले तर्क को एक स्ट्रिंग के रूप में मानता है जिसका अर्थ है कि सबसे पहले Infinity.toString()
स्ट्रिंग का उत्पादन किया जाता है "Infinity"
। तो यह उसी तरह काम करता है जैसे आपने इसे "Infinity"
बेस 19 में दशमलव में बदलने के लिए कहा था ।
यहाँ उनके दशमलव मानों के साथ आधार 19 में अंक हैं:
Base 19 Base 10 (decimal)
---------------------------
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
a 10
b 11
c 12
d 13
e 14
f 15
g 16
h 17
i 18
आगे क्या होता है कि parseInt
इनपुट "Infinity"
को यह पता लगाने के लिए स्कैन किया जाता है कि इसके किस भाग को पार्स किया जा सकता है और पहले स्वीकार करने के बाद बंद हो जाता है I
(क्योंकि n
आधार 19 में मान्य अंक नहीं है)।
इसलिए यह इस तरह व्यवहार करता है जैसे कि आप कहते हैं parseInt("I", 19)
, जो ऊपर दी गई तालिका द्वारा दशमलव 18 में बदल जाता है।
parseInt('Infini',24)
।
n
में भी एक वैध अंक है, इसलिए यह वास्तव में करना समाप्त कर देता है parseInt("Infini", 24)
।
यहाँ घटनाओं का क्रम है:
1/0
का मूल्यांकन करता है Infinity
parseInt
पढ़ता है Infinity
और खुशी से नोट करता I
है कि बेस 19 में 18 हैparseInt
स्ट्रिंग के शेष को अनदेखा करता है, क्योंकि इसे परिवर्तित नहीं किया जा सकता है।ध्यान दें कि आपको किसी भी आधार के लिए परिणाम मिलेगा >= 19
, लेकिन उसके नीचे के आधारों के लिए नहीं। ठिकानों के लिए >= 24
, आपको एक बड़ा परिणाम मिलेगा, क्योंकि n
उस बिंदु पर एक वैध अंक बन जाता है।
parseInt
स्वीकार करेगा 36, क्योंकि अंग्रेजी वर्णमाला में 26 अक्षर हैं, और कन्वेंशन अंकों का उपयोग करना है तो दिए गए आधार में मान्य अंकों के सेट के रूप में पत्र।
Infinity
का सुझाव दे सकता हूं "Infinity"
...
उपरोक्त उत्तरों को जोड़ने के लिए:
parseInt को स्ट्रिंग्स को संख्याओं में पार्स करने का इरादा है (सुराग नाम में है)। आपकी स्थिति में, आप कोई भी पार्सिंग नहीं करना चाहते हैं क्योंकि 1/0 पहले से ही एक नंबर है, इसलिए यह फ़ंक्शन का एक अजीब विकल्प है। यदि आपके पास एक संख्या है (जो आप करते हैं) और इसे एक विशेष आधार में बदलना चाहते हैं, तो आपको इसके बजाय एक मूलांक के साथ स्ट्रिंग का उपयोग करना चाहिए ।
var num = 1 / 0;
var numInBase19 = num.toString(19); // returns the string "Infinity"
उपरोक्त उत्तरों को जोड़ने के लिए
parseInt(1/0,19)
के बराबर है parseInt("Infinity",19)
आधार 19 नंबरों के भीतर 0-9
और A-I
(or a-i)
एक वैध संख्या हैं। तो, "इन्फिनिटी" से यह I
बेस 19 का हो जाता है और बेस 10 में परिवर्तित हो जाता है, जो 18 हो जाता है, फिर यह अगले वर्ण को लेने की कोशिश करता है, n
जो बेस 19 में मौजूद नहीं है, इसलिए अगले वर्णों के अनुसार (नंबर के स्ट्रिंग बदलने के लिए जावास्क्रिप्ट के व्यवहार के अनुसार) )
इसलिए, यदि आप लिखना parseInt("Infinity",19)
या parseInt("I",19)
या parseInt("i",19)
परिणाम एक ही यानी हो जाएगा 18
।
अब, अगर आप लिखना parseInt("I0",19)
परिणाम होगा 342
के रूप में I X 19 (the base)^1 + 0 X 19^0
= 18 X 19^1 + 0 X 19^0
= 18 X 19 + 0 X 1
=342
इसी तरह, parseInt("I11",19)
में परिणाम होगा6518
अर्थात
18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 19^2 + 1 X 19^1 + 1 X 19^0
= 18 X 361 + 1 X 19 + 1 X 1
= 6498 + 19 + 1
= 6518
if
मदद कर सकता है।