Number with Leading Zero in JavaScript: Deciphering the Mystery
Imagine encountering the following code in JavaScript:
var num = 040; console.log(num); // 32
Perplexed, you might wonder how 40 equals 32. The answer lies in the significance of the leading zero.
In JavaScript's early versions, leading zeros in numeric literals denoted octal (base 8) numbers, similar to leading 0x for hexadecimal. Thus, "040" was interpreted as 4x8^1 0x8^0 = 32.
However, this practice proved confusing and was downgraded to an optional extension in ECMAScript 3. Modern JavaScript enforces strict mode, where leading zeros in decimal literals are forbidden for consistency.
ECMAScript 6 introduced new ways to represent octal and binary numbers using 0o and 0b prefixes, respectively. The legacy octal format using leading zeros (010) became a syntax error in strict mode.
Therefore, the code above will now return a syntax error in strict mode. If one desires to parse numbers in base 8, they can use the recommended 0o prefixes or employ parseInt as follows:
parseInt('010', 8); // Returns 8
To ensure decimal numbers are parsed correctly, remove leading zeros or use parseInt.
In summary, understanding the historical significance of leading zeros in JavaScript's numeric literals is crucial for comprehending its behavior and interpreting code correctly.
The above is the detailed content of Why Does `040` Equal 32 in JavaScript?. For more information, please follow other related articles on the PHP Chinese website!