मुझे जावास्क्रिप्ट में एक कष्टप्रद समस्या है ।
> 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 का मूल्यांकन करता है InfinityparseIntपढ़ता है 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मदद कर सकता है।