在JavaScript中,使用parseInt和负零会出现奇怪的行为?

3
为什么:
parseInt(-0, 10) // 0
parseInt('-0', 10) // -0

有没有合理的理由解释为什么parseInt不能同时处理-0,还是这只是JavaScript的一个怪异之处?

到底有什么区别呢? - elclanrs
@elclanrs:嗯,5 * -0-0,而 5 * 00 - Marc B
1
我在NodeJS中得到了所有正零。我想这是浏览器的问题。 - elclanrs
是的,我也确认了。Node对于每个组合都会返回+0。我的测试使用的浏览器是Chrome。 - Semicolon
我使用 Node v0.11.13-pre,我能够重现这个问题。 - thefourtheye
2个回答

7

parseInt() 可以用于字符串。在一个数字上运行 parseInt() 会将它转换为一个字符串。

(-0).toString() 的结果是 0


2
谢谢,这解释了问题--但它也只是把问题转移过去了;为什么(-0).toString()应该返回'0'而不是'-0'? - Semicolon
2
@分号 对于那个问题,我不知道。这也很奇怪,因为它们都使用V8,但在Node.js和Chrome之间不同。 - Brad

2
parseInt的第一个参数根据ECMA 5.1规范被转换为字符串。
1. Let inputString be ToString(string).

ToString将返回'0',即使输入是+0-0

2. If m is +0 or −0, return the String "0".
这就是你遇到这种情况的原因。

很清楚。所以Chrome是正确的——但(某些版本的)Node是错误的。我仍然对ToString取消-0的有理基础感到困惑,不幸的是规范没有提供。 - Semicolon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接