javascript - 当我在严格模式下使用 `===` 运算符时,javascript 中出现比较歧义,有人可以告诉我这是为什么吗?

标签 javascript comparison strict

<分区>

同样的操作得到不同的结果,谁能告诉我为什么。

"use strict"
console.log(+0 === -0) // true
+0 === -0              // false

执行结果:

execution result

最佳答案

这里没什么大不了的,因为没有分号,您的代码被解释如下。

"use strict" +0 === -0

使用分号,

"use strict";
+0 === -0

严格模式与比较无关。看看 abstract equality算法。 +0 将始终等于 -0

当涉及到你的情况时,你的代码将被这样解释,

"use strict" console.log(+0 === -0) +0 === -0

那么这里发生了什么,

  • 首先 console.log() 将首先被评估,true 将被打印在控制台中。
  • 现在这部分 undefined +0 === -0 将被评估
  • undefined + 0NaN,所以 NaN === -0 将是 false

关于javascript - 当我在严格模式下使用 `===` 运算符时,javascript 中出现比较歧义,有人可以告诉我这是为什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57394002/

相关文章:

javascript - 如何在 PrimeNG 表中使用多选过滤器?

javascript - Cypress 测试无法识别 node_modules 包类型

javascript - 使用 fp-ts 删除 Either 数组中的重复项

java - 找出两个相似对象之间的差异

postgresql - 函数在没有 STRICT 修饰符的情况下执行得更快?

javascript - 严格违反使用此关键字和揭示模块模式

javascript - 为什么 BootstrapValidator 不工作?

performance - 为什么 "MOVQ 0x30(SP), DX"慢?

javascript - 对同一个对象的两个引用是否可能是!==?

haskell - seq 函数和严格性