【问题标题】:Javascript AND OR operators and parenthesesJavascript AND OR 运算符和括号
【发布时间】:2021-01-09 04:25:11
【问题描述】:

在 if 和 or 语句中正确触发代码时遇到问题。我希望语句中的代码在 defholdid var 等于“cb_SR”并且这些变量中的任何一个为真时运行:altRighttargets、inRightTargets、safetyRightTargets。我自己检查了每个变量,它们都收到了我期望的值。声明如下:

 if (defholdid === "cb_SR" && (altRightTargets === true || inRightTargets === true || safetyRightTargets === true)) {
        //code I want to trigger
};

我用每个单独的表达式检查了语句,我可以让代码触发,所以我认为我写错了语句。

谢谢,

【问题讨论】:

  • 这里看起来不错。你能用minimal reproducible example 说明问题吗?
  • 如果xxxTargets变量总是包含布尔值,则不需要写=== true。写(altRightTargets || inRightTargets || safetyRightTargets)
  • @Barmar,这对我有用,所以谢谢!但我不知道为什么?
  • 这不应该有什么不同,除非变量并没有真正包含布尔值。也许它们包含字符串?
  • @Barmar 我浏览了我的代码,确实有一个变量被设置为'true',带有引号而不是真正的布尔值。我修复了它,现在两种方法(包括我的原始语法)都可以工作。它“有效”是因为我猜它忽略了“safetyRightTargets”(变量错误地设置为字符串)?无论如何,感谢您的帮助,如果没有您的评论,就不会发现问题,并且可能会让我非常头疼!

标签: javascript if-statement variables operators


【解决方案1】:

确保您与true 比较的变量实际上是布尔值,而不是字符串"true""false"。如果它们包含这些字符串,则与true 的比较将始终为假。在 OR 分组的上下文中,该变量实际上被忽略了。

对于不同类型的值,严格相等运算符=== 将始终为假。但即使您更改为松散相等运算符==true == "true" 也会为假。在将布尔值与另一种类型进行比较时,布尔值首先转换为01,然后将其与其他值进行比较(可以进行额外的类型处理)。所以true == "1" 为真,因为1 == "1",但true == "true" 为假,因为1 == "true" 为假。正如this answer 中所指出的,我们有以下比较布尔值和字符串的情况:

true == "true"; //false
true == "1"; //true
false == "false"; //false
false == ""; //true
false == "0"; //true

【讨论】:

  • 谢谢你的解释,现在对我来说很有意义。
  • 您应该接受答案以表明它解决了问题。
猜你喜欢
  • 2015-02-17
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2020-12-17
相关资源
最近更新 更多