2012-09-07 29 views
12

संभव डुप्लिकेट:
Workarounds for JavaScript parseInt octal bugparseInt ("08") रिटर्न 0

मैं एक जावास्क्रिप्ट समारोह पर काम कर रहा हूँ, इस वर्ष की घोषणा के द्वारा तिथि वस्तुओं की स्थापना, महीने & तारीख । हालांकि, जब का उपयोग करते समय महीने में 08 या 09 का मान है, 0 वापस किया जाता है। नीचे देखें:

parseInt("01") //returns 1 
parseInt("02") //returns 2 
parseInt("03") //returns 3 
parseInt("04") //returns 4 
parseInt("05") //returns 5 
parseInt("06") //returns 6 
parseInt("07") //returns 7 
parseInt("08") //returns 0? 
parseInt("09") //returns 0? 
parseInt("10") //returns 10 

मैं इस मुद्दे को प्रदर्शित करने के लिए एक jsFiddle बना लिया है:

http://jsfiddle.net/GhkEf/

क्यों parseInt("08") और parseInt("09") वापसी 0?

+0

http://stackoverflow.com/questions/6410009/what-do-you-think-parseint08-will-return?rq=1 –

+2

एमडीएन दस्तावेज़ पढ़ें: https://developer.mozilla.org/en- यूएस/डॉक्स/जावास्क्रिप्ट/संदर्भ/Global_Objects/parseInt यह समस्या अच्छी तरह से प्रलेखित –

+0

@ ŠimeVidas आह है! शुक्रवार दोपहर हिचकी! आपके प्रतिक्रियाओं के लिए धन्यवाद – Curt

उत्तर

37

ऐसा इसलिए है क्योंकि 0 से शुरू होने वाली संख्याओं को ऑक्टल माना जाता है। और 08 ऑक्टल में एक गलत संख्या है।

इसके बजाय parseInt('09', 10); का उपयोग करें।

+0

धन्यवाद। आपने मेरा समय बचाया –

+2

यह केवल IE8 पर होता है। –

+0

बहुत बहुत धन्यवाद। यह बहुत उपयोगी सवाल और उत्तर है। –

4

इसे एक अंडाकार संख्या के रूप में पार्स किया जा रहा है। parseInt में radix पैरामीटर का उपयोग करें।

parseInt('08', 10);

एक अद्यतन: ES5 के रूप में, ब्राउज़रों नहीं इस बग होना चाहिए। ऑक्टल अक्षरों को 0o12 रूप में अस्थायी संख्या माना जाना चाहिए। 08 डिफ़ॉल्ट रूप से अब माना जाता है ES5 में एक दशमलव संख्या, तथापि, सभी ब्राउज़रों यह अभी तक समर्थन नहीं कर सकते, तो आप मूलांक, जैसे शामिल करके parseInt

1

को radix पैरामीटर पारित करने के लिए आप इसे ठीक कर सकते जारी रखना चाहिए:

parseInt("08", 10); // outputs 8 
1

आप दस का एक मूलांक जोड़ने की जरूरत:

parseInt("08", 10); 

कुछ कार्यान्वयन डिफ़ॉल्ट ऑक्टल करने के लिए।

संबंधित मुद्दे