JavaScript 中的逻辑运算符——你如何使用它们?

IT技术 javascript logical-operators
2021-02-03 02:41:28

我不明白&&, ||, 和如何!工作......无论是布尔值还是其他数据类型。你如何使用它们?

2个回答

Javascript 中的所有值要么是“真”,要么是“假”。

  • a && b 计算为第一个假操作数
  • a || b 评估为第一个真实操作数

两个运算符都不会在返回后评估任何操作数。
如果所有操作数都不匹配,它将评估为最后一个。

  • !a评估trueifa为假和falseifa为真。

所有值都除以下,这是truthy falsy

  • false
  • +0
  • -0
  • NaN
  • ""
  • null
  • undefined
  • document.all
它应该说明“所有都是真实的......”,因为 ieundefined是一个值,但undefined默认情况下还有一个保存这个值的变量此外NaN不等于任何东西,甚至没有自己。
2021-03-19 02:41:28
仍然 NaN == NaN 是假的。所以它仍然是上面列表中的一个特例,人们可能认为 NaN 的工作方式与其他所有虚假值一样。
2021-03-31 02:41:28
我知道这是古老的历史,但是document.all
2021-04-03 02:41:28
@Ivo:SLaks 仅列出 JavaScript 的虚假值。他没有声称任何NaN其他value或任何其他value。
2021-04-06 02:41:28
@Ivo:1:固定。2:那无关紧要;!NaNtrue,所以NaN是假的。
2021-04-08 02:41:28

如果你想测试这两个的两个条件都那么truthy使用&&:

if (isX && isY)
{
     // Do something.
}

如果您想测试两个条件中的一个或两个是否为真,请使用 ||:

if (isX || isY)
{
     // Do something.
}

所述!反转的布尔(一个truthy值变为假,并且反之亦然)。

它不应该混淆任何人。自大约 5 年前以来,短路一直是 javascript 中的常见习语。Crockford 调用||默认运算符,因此"Cat" || "Dog"应阅读cat, defaults to dog. 我个人将其阅读为cat, otherwise dog.
2021-03-26 02:41:28
怎么样document.write("Cat"||"Dog")
2021-03-30 02:41:28
@DarkLightA:我建议你不要写那样的代码!它会导致隐式转换,并且会让每个人都感到困惑。
2021-03-31 02:41:28