我对parseInt的一个特定结果感到困惑。我以为我理解它的大部分怪癖,但这一点还不清楚。
parseInt("010", 10); // 10
parseInt(010, 10); // 8, but expecting 10在第二个例子中,我指定了正确的基数。意外结果的原因是什么?
溶液
问题是八进制文字。当一个数字以0作为前缀时,它被视为八进制文字。
如果你执行
console(010); // 8在非脚本模式下,您将得到8。parseInt之所以有我认为是奇怪的行为是因为我实际上是在执行。
parseInt(8, 10); // 8预计会有10人。
ParseInt从来没有看到010,只有8。感谢大家的帮助。
发布于 2013-11-17 03:54:16
在传递给parseInt之前,正在对该数字进行分析。
例如,它类似于它的工作方式:
var x = 010;
console.log(x); // 8
parseInt(x, 10); 既然你通过了8点,你当然会得到8点。在一个数字前面加上0将使它成为八进制文字,它使用的基数为8。您可以删除前面的0(前面的0首先没有意义),或者(正如您在问题中所做的那样)将其作为字符串传递。
注意,并不是所有的浏览器都这样做的,只是那些与以前的代码兼容的浏览器(它不是必需的)和在ES5严格模式下解析八进制文字。要查看这一效果,请比较非严格版本:
(function ()
{ // not strict
parseInt(010, 10);
})();..。它返回8或10 (取决于实现),并具有严格的版本:
(function ()
{ "use strict";
parseInt(010, 10);
})();这将导致SyntaxError: Octal literals are not allowed in strict mode.。
https://stackoverflow.com/questions/20026978
复制相似问题