underscore.js中的否定词:为什么_isEqual(0,-1*0)返回false
Negatives in underscore.js: why is _isEqual(0, -1 * 0) returning false?
使用javascript库undercore.js(v.1.3.1),我在最新的Chrome(17.0.963.56)和Firefox 7.0中的mac上复制了以下内容:
0 === -1 * 0
> true
_.isEqual(0, -1 * 0)
> false
至少对我来说,这是令人惊讶的。我原以为===
为真的两个值会导致_.isEqual
也为真。
这是怎么回事?谢谢
它已经明确地放在源中:
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
的解释确实不同,但您通常看不到这一点,因为0 == -0
和0 === -0
。只有几种方法可以检查差异。
在此处查看eq
函数的源代码。根据isEqual
,-1 * 0
是-0
,而不是0
,因此0
和-0
不相等。
相关线路:
// 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使用IEEE双精度浮点数,它们对0和-0有不同的表示形式(这在处理极限等问题时可能很重要)。但通常你不会注意到这一点,因为0==-0。
相关文章:
- Array.every返回false,而不是类型error
- Javascript If else 只返回 TRUE 或只返回 FALSE
- 为什么当我在数组上测试regex时,它会返回false
- 过滤器返回true或false
- 检查文本区域是否为空总是返回false
- PHP strtotime()为JavaScript日期字符串返回false
- onsubmit返回false,但submit仍然执行
- 这个代码会返回false吗
- Ajax向表单返回false
- 表单验证JavaScript编号总是返回false
- 使用!而in运算符在应该为true时返回false,为什么
- 如何使以下函数返回true或false
- jQuery.is(':checked')总是返回false
- 为什么 javascript 返回对象位置 true 或 false
- Javascript 下划线每个总是返回 false
- 提交返回 false 总是在 jquery 中
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- 如何使用angular或javascript在基于true/false返回的html中显示值
- Javascript:奇怪的行为' empty string '和' false '返回空字符串
- NaN是伪造的吗?为什么NaN===false返回false