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

Javascript 需要对equals运算符(=)进行一些澄清,javascript,Javascript,我对下面关于相等比较运算符== 如果两个操作数的类型不同,JavaScript将转换操作数,然后应用严格比较。如果任一操作数是数字或布尔值,则如果可能,将操作数转换为数字;否则,如果其中一个操作数是字符串,则如果可能,将另一个操作数转换为字符串。如果两个操作数都是对象,则JavaScript比较操作数引用内存中同一对象时相等的内部引用 但是警报(true==“true”)和警报(false==“false”)都返回false。为什么会这样 如果操作数是数字或布尔值,则如果可能,操作数将转换为数字

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

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

但是
警报(true==“true”)
警报(false==“false”)
都返回false。为什么会这样

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

在什么情况下JavaScript会将true和“true”转换为数字?上一个示例没有将它们转换为数字

在看这些例子时,我有更多的疑问:

''        ==   '0'           // false
0         ==   ''            // true
0         ==   '0'           // true
false     ==   'false'       // false
false     ==   '0'           // true
  • '
    '0'
    ,但为什么输出为
  • 0
    将被解释为false
    也被解释为false。然后它变为。我能理解这一点
  • 0
    时,为什么
    '0'
    解释为true
  • 为什么
    false
    被解释为false
    '0'
    被解释为true
有人能更详细地解释一下
==
操作符是如何工作的吗

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

== // will check only value not type
所以

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

请看一看。您想使用===而不是==

==检查值和类型是否相等

从文件中:

相等(=,!=)

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

NaN不等于任何东西,包括它自己

负零等于正零

null等于null和未定义

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

其他每一项比较都被认为是不平等的

身份(==.!==)

这些运算符的行为与相等运算符相同,除了no 类型转换已完成,并且类型必须相同才能进行转换 被认为是平等的

为什么true==“true”和false==“false”是false

如果操作数是数字或布尔值,则转换操作数 如果可能的话,把数字改成数字

布尔值true可以转换为1

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”

您的所有其他查询都可以使用相同的推断来解决。 尝试根据规则显式转换参数,并在控制台中检查其值


例如:
console.log(TYPE(arg))//类型是字符串或数字

使用
===
而不是
=
来实现精确的相等
=
将检查类型和值是否相等。
true
转换为1,
false
转换为0。如果我想得到正确的输出==我如何使用这个“
为false,
'0'
为true,但为什么输出为false?”这是什么问题?意思是有人问我这个问题。这就是我问这个的原因
console.log(Number("true"));  // NaN . "True" cannot be converted to a number