Javascript - Leading zero to a number converting the number to some different number. not getting why this happening?

A leading zero to some number converting the number to some unknown number format. for example :

017 is getting converted to 15

037 is getting converted to 31

Also found that numbers having 8 0r 9 at end are remaining same for example :

018 is 18

038 is 38

o59 is 59

one more thing that I found is

for each next range of 10 the difference between converted value and the actual value get incremented by 2

for example :

for range 00-09 difference is 0 i.e value of 07 will be 7, 04 will be 4

for range 010-019 difference is 2 value of 017 will be 15, 013 will be 11

for range 020-029 difference is 4 value of 027 will be 23, 021 will be 17

and so on..

here is a snipet for test

I am not getting why this is happening ?

Please help me how to get the correct decimal number from the number having leading zero ?



If there is a leading 0, it is converting it to octal (base 8) as long as its a valid number in base 8 (no numbers greater than 7).

For example:

017 in base 8 is 1 * 8 + 7 = 15 037 in base 8 is 3 * 8 + 7 = 31

018 is converted to 18 because 018 isn't a valid number in base 8

Note that the behavior as to which base the number is converted to by default can be browser-specific, so its important to always specify the base/radix when using parseInt:

parseInt("017",10) === 17

UPDATE based on comments:

parseInt expects a string as the first argument, so

parseInt("012",10) === 12


One of the reasons to "use strict";

(function() {"use strict"; 017})()

// Firefox => SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated; for octal literals use the \"0o\" prefix instead 
// Chrome, Node => SyntaxError: Octal literals are not allowed in strict mode.


Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.