首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >parseInt("010",10);与parseInt(010,10);

parseInt("010",10);与parseInt(010,10);
EN

Stack Overflow用户
提问于 2013-11-17 03:51:13
回答 2查看 3.2K关注 0票数 4

我对parseInt的一个特定结果感到困惑。我以为我理解它的大部分怪癖,但这一点还不清楚。

代码语言:javascript
复制
parseInt("010", 10); // 10

parseInt(010, 10);   // 8, but expecting 10

在第二个例子中,我指定了正确的基数。意外结果的原因是什么?

溶液

问题是八进制文字。当一个数字以0作为前缀时,它被视为八进制文字。

如果你执行

代码语言:javascript
复制
console(010); // 8

在非脚本模式下,您将得到8。parseInt之所以有我认为是奇怪的行为是因为我实际上是在执行。

代码语言:javascript
复制
parseInt(8, 10); // 8

预计会有10人。

ParseInt从来没有看到010,只有8。感谢大家的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-17 03:54:16

在传递给parseInt之前,正在对该数字进行分析。

例如,它类似于它的工作方式:

代码语言:javascript
复制
var x = 010;
console.log(x); // 8
parseInt(x, 10); 

既然你通过了8点,你当然会得到8点。在一个数字前面加上0将使它成为八进制文字,它使用的基数为8。您可以删除前面的0(前面的0首先没有意义),或者(正如您在问题中所做的那样)将其作为字符串传递。

注意,并不是所有的浏览器都这样做的,只是那些与以前的代码兼容的浏览器(它不是必需的)和在ES5严格模式下解析八进制文字。要查看这一效果,请比较非严格版本:

代码语言:javascript
复制
(function ()
{   // not strict
    parseInt(010, 10);
})();

..。它返回8或10 (取决于实现),并具有严格的版本:

代码语言:javascript
复制
(function ()
{   "use strict";
    parseInt(010, 10);
})();

这将导致SyntaxError: Octal literals are not allowed in strict mode.

票数 9
EN

Stack Overflow用户

发布于 2013-11-17 03:54:43

以零开头的数字文字以八进制而不是小数开头,因此010等于8,除非在严格模式下操作。

需要注意的是,parseInt的行为取决于浏览器使用的ECMAScript (JavaScript)版本,也取决于您是否使用严格模式。有关更多细节,请参见无基数八进制解释

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20026978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档