为啥我在 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 通常使用 'var' 而不是 'let'?