javascript - 使用 `!=` 和 `==` 比较对象和 bool 值有不同的结果

标签 javascript equality

我无法理解 JavaScript 中相等运算符的行为。这是我在浏览器控制台上运行以下命令时得到的结果:

new Object() == true  // returns false
new Object() != false // returns true

现在,我不同意 Object 应该为 false 这一事实(尽管在检查了 ECMAScript Language Specification 之后我理解了为什么),但真正困扰我的是我得到了两个两个等价逻辑表达式的不同结果。

发生了什么事?

最佳答案

根据规范,这两个都应该返回false(这符合我的常识):

new Object() == true  // false
new Object() == false // false

基于:

  1. If Type(x) is Object and Type(y) is either String or Number, return the result of the comparison ToPrimitive(x) == y.

  2. Return false.

因为它们都返回 false 并且:

A != B is equivalent to !(A == B).

这两个都应该是true:

new Object() != true  // true
new Object() != false // true

注意: 这不应与 new Object()真实性相混淆。换句话说 new Object() == true 是不一样的 Boolean(new Object()) == true

关于javascript - 使用 `!=` 和 `==` 比较对象和 bool 值有不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53441977/

相关文章:

javascript - 无法强制 Chrome 使用 Javascript 滚动到页面顶部

go - 检查 slice 中的所有项目是否相等

java - 如何在 Java 中比较字符串?

c# - 断言动态集合中两个不同的对象是否具有相同的值

javascript - react ;访问对象内的字段

javascript - 一般脚本 : selecting the input element for which keypress event is fired, 没有实际传递 ID 等

javascript - 如何使用数组包含函数检查对象数组中的对象相等性?

java - Java中的整数比较

javascript - 使用 Javascript 在 Span 标签内动态插入链接

javascript - JS/JQuery 中的去抖动滚动事件是如何工作的?