为什么“1”== 1在Javascript中返回true?

时间:2014-02-14 04:50:26

标签: javascript boolean

我正在努力学习更多有关这种自由主义语言的知识,而且很好的解释会很棒。

谢谢!

5 个答案:

答案 0 :(得分:3)

来自规范

  

The Abstract Equality Comparison Algorithm

     

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

     
      
  1. 如果Type(x)与Type(y)相同,那么

         

    一个。如果Type(x)是Undefined,则返回true。

         

    湾如果Type(x)为Null,则返回true。

         

    ℃。如果Type(x)是Number,那么

    i. If x is NaN, return false.
    
    ii. If y is NaN, return false.
    
    iii. If x is the same Number value as y, return true.
    
    iv. If x is +0 and y is −0, return true.
    
    v. If x is −0 and y is +0, return true.
    
    vi. Return false.
    
         

    d。如果Type(x)是String,则如果x和y完全相同的字符序列(相同的长度和相同的字符),则返回true   相应的职位)。否则,返回false。

         

    即如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true。否则,返回false。

         

    F。如果x和y引用同一个对象,则返回true。否则,返回false。

  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.   

答案 1 :(得分:2)

这是因为JavaScript只比较语句"1" == 1中的值。双等号告诉JavaScript,即使类型不同,也允许它强制并比较纯值。

这就是为什么经常建议使用三等号,以避免这种类型的强制。三等于符号纯粹比较价值。

答案 2 :(得分:1)

答:

由于丢失类型检查

  

Equal(==)如果两个操作数的类型不同,则为JavaScript   转换操作数,然后应用严格的比较。如果是   操作数是一个数字或布尔值,操作数转换为   数字如果可能;否则,如果任一操作数是字符串,则为字符串   如果可能,操作数将转换为数字。如果两个操作数都是   对象,然后JavaScript比较相同的内部引用   当操作数引用内存中的同一个对象时。

因此,请始终使用===运算符或使用strict mode

Javascript Operators

答案 3 :(得分:1)

隐式检查

"1" == 1 //true
1 == 1 //true

明确检查

1 === 1 //true
"1" === 1 //false

答案 4 :(得分:1)

如果使用==符号,javascript将不会检查类型。它进行自动类型转换。

如果您使用=== javascript将检查类型。并且这将为您的示例返回false。