【发布时间】:2010-10-25 10:05:47
【问题描述】:
尝试在 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 认为前导零表示 octal integer 的艰难方法,并且由于在 base-8 中没有 "8" 或 "9",因此该函数返回零。不管你喜不喜欢,this is by design。
有什么解决方法?
注意:为了完整起见,我将发布一个解决方案,但这是我讨厌的解决方案,所以请发布其他/更好的答案。
更新:
第 5 版 JavaScript 标准 (ECMA-262) 引入了一项突破性更改,消除了这种行为。 Mozilla 有一个很好的write-up。
【问题讨论】:
-
第 1 步)帮自己一个忙,始终包括前面的答案以及 Doug 的书中提到的基数。第 2 步)如果你对学习 JavaScript 很认真,那就给自己买一本 Doug 的书。这是无价的。到目前为止我最喜欢的书。这是评论仅供参考:realtech.burningbird.net/learning-javascript/basics/…
-
在 ECMAScript 第 5 版兼容的浏览器中,例如 Internet Explorer 9,基本参数默认为
10(十进制),除非要解析的数字以0x为前缀,例如0xFF,在这种情况下,基本参数默认为 16。希望有一天,这个问题将成为遥远的记忆。 -
+'08' === 8怎么样?真的!也许你真的需要parseInt来提供你的真实代码,但上面不需要。 -
a) 这不是错误,修复标题 b)
Number('08') -
@portman: “第 5 版...引入了一个突破性的更改,消除了这种行为” 可能值得指出的是,即使在第 3 版(13 年前)中,实现被“鼓励”不要这样做:“当基数是
0或undefined并且字符串的数字以0数字开头而不是x或X时,则执行可以自行决定将数字解释为八进制或十进制。鼓励实现在这种情况下将数字解释为十进制。"(我的重点)
标签: javascript integer octal