我有parseInt功能。
输入010作为输入:
在IE中输出:8 chrome和firefox中的输出:10
输入099作为输入:
IE中的输出:0 chrome和firefox中的输出:99
有人可以帮助我理解浏览器中的这种不同行为吗? 问题是在IE中,它在chrome和firefox中按预期工作。
提前致谢。
答案 0 :(得分:4)
实际上我认为IE在这里正确地做事 * 。对于以parseInt
开头的字符串,0
被视为 octal 输入。
要解决此问题,请指定基数(在这种情况下,您需要小数 - 10
):
num = parseInt(str, 10);
* 在这种情况下,“正确”实际上意味着“传统”。规范实际上已经改变了。
Technically, a string starting with 0
can be treated as either octal OR decimal, depending on the implementor's whim, where decimal is now preferred:
如果基数为
undefined
或0(或不存在),则JavaScript假定以下内容:
- 如果输入
string
以“0”开头,则基数为八(八进制)或十进制(十进制)。究竟选择哪个基数是依赖于实现的。 ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持此功能。因此,在使用parseInt 时始终指定基数。