需要对equals运算符进行一些澄清(==)

时间:2015-08-20 03:36:24

标签: javascript

我对下面关于等于比较运算符==

的陈述感到困惑
  

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

alert(true == "true")alert(false == "false")都会返回 false 。为什么会这样?

  

如果任一操作数是数字或布尔值,则操作数将转换为数字(如果可能)

JavaScript在什么情况下将true和“true”转换为数字?前面的示例不会将它们转换为数字。

在查看这些示例时,我有更多疑问:

''        ==   '0'           // false
0         ==   ''            // true
0         ==   '0'           // true
false     ==   'false'       // false
false     ==   '0'           // true
  • '' false '0' true ,但为什么输出为 false
  • 0将被解释为 false ,而''也会被解释为 false 。然后它变为 true 。我能理解这一点。
  • '0' false 时,为什么0被解释为 true
  • 为什么false被解释为 false '0'被解释为 true

有人可以更详细地解释==运算符的工作原理吗?

3 个答案:

答案 0 :(得分:4)

=== // strict check. Will compare value and type

== // will check only value not type

所以,

0         ==    ''            // true

0         ===   ''            // false
  

在执行任何必要操作后,==运算符将比较相等性   类型转换。 ===运算符不会进行转换,所以如果   两个值不是同一类型===只会返回false。它' S   这种情况下===会更快,并可能返回不同的结果   比==。在所有其他情况下,表现将是相同的。

Does it matter which equals operator (== vs ===) I use in JavaScript comparisons?

答案 1 :(得分:2)

为什么是真的=="是真的"和假=="假"是假的?

  

如果操作数是数字或布尔值,则转换操作数   尽可能的数字

布尔值true可以转换为一个。

console.log(Number(true)); // 1

让我们转换第二个参数

console.log(Number("true"));  // NaN . "True" cannot be converted to a number

所以这评估为1==NaN // false。 NaN很疯狂,因为它甚至不等于NaN == NaN

false =="false"

的情况也是如此

您可以使用相同的扣除来解决所有其他查询。 尝试使用expliclity根据规则转换你的参数,并在控制台中检查它的值。

例如。)console.log(TYPE(arg)) // Type is either String or Number

答案 2 :(得分:1)

看看javascript documentation。您想使用===而不是==

===检查值和类型相等。

来自文档:

  

平等(==,!=)

     

如果两个表达式的类型不同,请尝试转换   它们是字符串,数字或布尔值。

     

NaN不等于包括其自身在内的任何东西。

     

负零等于正零。

     

null等于null和undefined。

     

如果值是相同的字符串,则数值被认为是相等的   等价数字,相同对象,相同布尔值或(如果   不同的类型)他们可以被胁迫进入其中一种情况。

     

其他所有比较都被视为不平等。

     

身份(===。!==)

     

这些运算符的行为与除了no之外的相等运算符相同   完成类型转换,类型必须相同   被认为是平等的。