比较对象和布尔使用`!=`和`==`会有不同的结果

时间:2018-11-23 06:59:29

标签: javascript equality

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

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

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

发生了什么事?

2 个答案:

答案 0 :(得分:1)

您已链接到this,该列表根据左侧和右侧的内容给出了一个十步检查清单。

左侧是一个对象。右侧是布尔值。

这意味着它进入了步骤10:

  

返回false。

一个对象不等于true,也不等于false

答案 1 :(得分:1)

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

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

基于:

  
      
  1. 如果类型(x)为对象,类型(y)为字符串或数字,   返回比较结果ToPrimitive(x)== y。

  2.   
  3. 返回false。

  4.   

由于它们都返回false并且:

  

A!= B等于!(A == B)。

这两个都应为true

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

注意: 这不应与new Object()真实性混淆。换句话说new Object() == trueBoolean(new Object()) == true

不同