使用javascript库underscore.js(v.1.3.1),我在Mac上以最新的Chrome(17.0.963.56)和Firefox 7.0重现了以下内容:
0 === -1 * 0
> true
_.isEqual(0, -1 * 0)
> false
令人惊讶的是,至少对我而言。我预计===
为真的两个值会导致_.isEqual
也为真。
这里发生了什么?谢谢!
答案 0 :(得分:4)
已明确提出in the source:
function eq(a, b, stack) {
// Identical objects are equal. `0 === -0`, but they aren't identical.
// See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
if (a === b) return a !== 0 || 1 / a == 1 / b;
事实上,JavaScript确实解释了0
和-0
differently,但您通常看不到这一点,因为0 == -0
和0 === -0
。只有a few ways来检查差异。
答案 1 :(得分:3)
答案 2 :(得分:2)
它比那更深。 JavaScript使用IEEE双精度浮点数,它们对0和-0有不同的表示(当你处理限制时这可能很重要)。但通常你没有注意到这一点,因为0 === -0。