Javascript parseInt()和八进制-哪些浏览器支持它?

Javascript parseInt()和八进制-哪些浏览器支持它?,javascript,Javascript,javascript parseInt函数在我尝试过的所有浏览器(相对较新的Chrome、Firefox和IE版本)中,都将“010”计算为十进制10,而不是八进制8,这是您所期望的,因为它已经被弃用很长时间了 但我有一些代码没有指定基数,我想知道运行旧浏览器的人是否会发现bug。是否有人编制了将解析octal的浏览器/版本列表?它有多常见?ECMAScript 5禁止解析八进制等(未指定基数)字符串。这意味着IE9及以上版本不会有问题(大多数其他浏览器也不会有问题,如图所示) 在这种情况下,我

javascript parseInt函数在我尝试过的所有浏览器(相对较新的Chrome、Firefox和IE版本)中,都将“010”计算为十进制10,而不是八进制8,这是您所期望的,因为它已经被弃用很长时间了


但我有一些代码没有指定基数,我想知道运行旧浏览器的人是否会发现bug。是否有人编制了将解析octal的浏览器/版本列表?它有多常见?

ECMAScript 5禁止解析八进制等(未指定基数)字符串。这意味着IE9及以上版本不会有问题(大多数其他浏览器也不会有问题,如图所示)

在这种情况下,我会担心IE8,因为它可能仍然在转换为八进制,给定前导零,而没有基数。(在ECMAScript 3中,这种转换只是不被鼓励的,而不是被禁止的——请参见)

当基数为0或未定义且字符串的数字以 0数字后面不跟xx,则实现可自行决定将数字解释为八进制或八进制 作为小数点。鼓励实现解释数字 在这种情况下,表示为十进制

如果基数未定义或0,则假定为10,除非 数字以字符对0x0x开头,其中 情况假设基数为16


因此,所有符合ES5标准的实现都将解析为十进制,而不是八进制。

最新的Chrome、Opera、Safari和FF为我在Chrome 40.0.2214.111中的console.log(parseInt(010))提供了
8
parseInt(010)==8和
parseInt('010')==10
。根据,如果不鼓励,在ECMAScript 5之前,允许将前导的
0
(在字符串中)作为隐式基数
8
。ECMAScript 5中不再允许此行为。您没有解析字符串-它仍然将数字010识别为8个八进制,但不能识别字符串“010”。从上面链接的MDN页面中可以看出,“从2013年起,许多实现都没有采用此行为,并且由于必须支持旧浏览器,因此始终指定基数。”(它们的重点不是我的)。就我个人而言,在接下来的几年里,我仍然会指定它们……我必须支持IE8。因此,我想我有一些基数指定要做。正如其中一条评论中提到的……始终指定基数是一个好主意——至少在未来几年内……:)我已经找到了一些可以测试的浏览器,你的猜测似乎是正确的——IE8表示“010”==8,IE9表示“010”==10。