如何解决JavaScript的ParseInt八进制行为?

如何解决JavaScript的ParseInt八进制行为?

尝试在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"在基-8中,函数返回零。不管你喜不喜欢,这是故意的.

解决办法是什么?

注意:为了完整起见,我即将发布一个解决方案,但这是一个我讨厌的解决方案,所以请发布其他/更好的答案。


最新情况:

JavaScript标准的第5版(ECMA-262)引入了消除此行为的破坏更改。莫兹拉笔迹.


千巷猫影
浏览 523回答 4
4回答

慕田峪4524236

这是一个常见的Javascript问题,有一个简单的解决方案:只是指定基,或“基数”,如下所示:parseInt('08',10); // 8你也可以用数:Number('08'); // 8

慕桂英3389331

如果你知您的值将在带符号的32位整数范围内。~~x在所有情况下都会做正确的事情。~~"08" === 8~~"foobar" === 0~~(1.99) === 1~~(-1.99)  === -1如果你查二进制不是(~),该规范要求对参数进行“ToInt 32”转换,该参数执行明显的Int 32转换,并被指定为强制转换。NaN值为零。是的,这太麻烦了,但太方便了.

牛魔王的故事

从ParseInt文件,使用可选基参数指定基-10:parseInt('08', 10); //equals 8 parseInt('09', 10); //equals 9这给我的印象是学究的,混乱的,冗长的(真的,在每一个ParseInt中都是一个额外的争论吗?)所以我希望有更好的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript