为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)

Posted

技术标签:

【中文标题】为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)【英文标题】:Why am I getting weird result using parseInt in node.js? (different result from chrome js console)为什么我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同) 【发布时间】:2013-05-28 15:14:36 【问题描述】:

我刚刚注意到:

//IN CHROME JS CONSOLE
parseInt("03010123"); //prints: 3010123

//IN NODE.JS
parseInt("03010123"); //prints: 790611

既然都是基于V8,为什么同样的操作会产生不同的结果???

【问题讨论】:

code.google.com/p/v8/issues/detail?id=1645 什么版本的节点?我无法重现它。 @RenatoGama:在 0.10.4 中运行良好。 这就是为什么parseInt() 应该始终与基数一起使用。 (我可以用 0.8.18 重现它。) developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 【参考方案1】:

当传递给parseInt 的字符串具有前导0 并且您不使用radix 参数时,会发生未定义的行为。

一个整数,表示上述字符串的基数。始终指定此参数以消除读者混淆并保证可预测的行为。当未指定基数时,不同的实现会产生不同的结果。

有些浏览器默认以 8 为基数,而有些则以 10 为基数。我不确定文档对 Node 的看法,但显然它假设以 8 为基数,因为以 8 为基数的 3010123 在以 10 为基数的 790611 是。

你会想要使用:

parseInt("03010123", 10);

【讨论】:

就是这样!谢谢。您可能希望通过添加此链接作为参考来改进您的答案:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 你也可以使用 Number() 作为替代。 节点 6.6:parseInt("03010123"); -> 3010123

以上是关于为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在使用 parseINt 或 undefined 时得到 NaN?

为啥我在 s3 上的访问被拒绝(使用适用于 Node.js 的 aws-sdk)?

为啥我在 Node.js 上有 NaN?

为啥 Node.js 通常使用 'var' 而不是 'let'?

为啥我的 javascript (node.js) 给了我不正确的时间戳?

为啥我的 cpanel 没有在软件中显示设置 node.js 应用程序图标?