需要关于等号操作符(==)的澄清。

3
我对下面关于等于比较运算符==的陈述感到困惑:
如果两个操作数类型不同,则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。我能理解。
  • 0false时,为什么'0'被解释为true
  • 为什么false被解释为false,而'0'被解释为true

有人能更详细地解释一下==操作符是如何工作的吗?


使用 === 而不是 == 进行精确相等性比较。=== 会检查类型和值是否相等。 - Tushar
如果我想要得到“==”的正确输出,我该如何使用它? - user944513
有人问我这个问题。所以我才会问这个问题。 - user944513
你实际上是在问为什么 false == true 返回 false... - Teemu
但我只想知道期望的输出是什么?“of ==”为什么浏览器会计算这个? - user944513
显示剩余2条评论
3个回答

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

== // will check only value not type

所以,
0         ==    ''            // true

0         ===   ''            // false

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

在JavaScript比较中使用哪个等于运算符(== vs ===)是否很重要?


2

为什么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)) // 类型可以是字符串或数字


1

看一下 JavaScript文档。你应该使用===而不是==

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

从文档中可以得知:

相等性(==,!=)

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

NaN与任何东西(包括自身)都不相等。

负零等于正零。

null等于null和undefined。

如果它们是相同的字符串、数值等效的数字、同一对象、相同的布尔值,或者(如果它们是不同的类型)它们可以强制转换为这些情况,则被认为是相等的。

其他所有比较都被认为是不相等的。

标识(===,!==)

这些运算符的行为与相等性运算符完全相同,除了不进行类型转换,并且必须具有相同的类型才能被视为相等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接