JavaScript:为什么[] ==![]?

时间:2012-10-13 08:10:52

标签: javascript

在JavaScript中,我注意到[]==![]结果为truedemo

我不明白这个结果。你能解释一下原因吗?

1 个答案:

答案 0 :(得分:10)

[]是一个数组,但![]是一个布尔值。每当您尝试将具有不同类型的两个对象与==进行比较时,两个对象都应转换为可比对象(使用ToNumber,请参阅11.9.3中的步骤7.)。这就是[] == ![]产生true的原因,第一个空数组被评估为false

  

11.9.3 The Abstract Equality Comparison Algorithm

     

比较x == y,其中x和y是值,产生true或false。这样的比较如下进行   如下:

     
      
  1. [...]
  2.   
  3. 如果x为null且y未定义,则返回true。
  4.   
  5. 如果x未定义且y为null,则返回true。
  6.   
  7. 如果Type(x)是Number而Type(y)是String,   返回比较结果x == ToNumber(y)。
  8.   
  9. 如果Type(x)是String而Type(y)是Number,   返回比较结果ToNumber(x)== y。
  10.   
  11. 如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y。
  12.   
  13. 如果Type(y)是布尔值,则返回比较结果x == ToNumber(y)。
  14.   
  15. 如果Type(x)是String或Number而Type(y)是Object,   返回比较结果x == ToPrimitive(y)。
  16.   
  17. 如果Type(x)是Object而Type(y)是String或Number,   返回比较结果ToPrimitive(x)== y。
  18.   
  19. 返回false。
  20.   

但是,如果使用严格类型比较运算符===,则结果为false,因为两种类型都不同:

  

11.9.6 The Strict Equality Comparison Algorithm

     

比较x === y,其中x和y是值,产生true或false。进行这样的比较   如下:

     
      
  1. 如果Type(x)与Type(y)不同,则返回false。
  2.   
  3. 如果Type(x)为Undefined,则返回true。
  4.   
  5. 如果Type(x)为Null,则返回true。
  6.   
  7. 如果Type(x)是Number,那么   
        
    1. 如果x是NaN,则返回false。
    2.   
    3. 如果y为NaN,则返回false。
    4.   
    5. 如果x与y的数值相同,则返回true。
    6.   
    7. 如果x为+0且y为-0,则返回true。
    8.   
    9. 如果x是-0且y是+0,则返回true。
    10.   
    11. 返回false。
    12.   
  8.   
  9. 如果Type(x)是String,则如果x和y完全相同的字符序列(相同的长度和   相应位置的相同字符);否则,返回false。
  10.   
  11. 如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true;否则,返回false。
  12.   
  13. 如果x和y引用同一个对象,则返回true。否则,返回false。
  14.