尝试在JavaScript中执行以下代码:
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
我刚刚吃了亏,原来JavaScript认为前导零表示一个八进制整数,而在八进制中没有"8"
或"9"
,所以函数返回零。不管你喜欢还是不喜欢,这是有意设计的。
有什么解决方法?
注意:为了完整起见,我将要发布一种解决方案,但它是我讨厌的解决方案,请发布其他/更好的答案。
更新:
JavaScript标准的第五版(ECMA-262)引入了一项破坏性变化,消除了这种行为。Mozilla有一个很好的说明。
+'08' === 8
?没错!也许你在实际代码中确实需要parseInt
,但对于上述情况不需要。 - kojiroNumber('08')
- OnTheFly0
或undefined
且字符串的数字以0
数字开头但后面没有跟随x
或X
时,实现可以自行决定将数字解释为八进制还是十进制。在这种情况下,鼓励实现将数字解释为十进制。”(我强调了)。 - T.J. Crowder