Javascript AND或运算符和括号

Javascript AND或运算符和括号,javascript,if-statement,variables,operators,Javascript,If Statement,Variables,Operators,在if和or语句中有正确触发代码的问题。我希望语句中的代码在defholdid变量等于“cb_SR”时运行,并且如果这些变量中的任何一个为true:altRighttargets、inRightTargets、safetyRightTargets。我自己检查了每个变量,它们都收到了我期望的值。声明如下: if (defholdid === "cb_SR" && (altRightTargets === true || inRightTargets === t

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

 if (defholdid === "cb_SR" && (altRightTargets === true || inRightTargets === true || safetyRightTargets === true)) {
        //code I want to trigger
};
我用每个表达式检查了语句,我可以得到要触发的代码,所以我认为我写的语句是错误的


谢谢,

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

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

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

这里看起来不错。你能举例说明这个问题吗?如果
xxxTargets
变量总是包含布尔值,你不需要写
==true
。只要写
(altRightTargets | | | inRightTargets | | | safetyRightTargets)
@Barmar,这对我很有用,谢谢!但我不知道为什么?这不应该有什么区别,除非变量实际上不包含布尔值。也许它们包含字符串?@Barmar我仔细检查了我的代码,确实其中一个变量被设置为带引号的“true”,而不是真正的布尔值。我修复了它,现在这两种方法(包括我的原始语法)都可以工作了。它“有效”,因为我猜它忽略了“safetyRightTargets”(变量错误地设置为string)?无论如何,谢谢你的帮助,如果没有你的评论,我是不会发现这个问题的,而且可能会让我一路头疼!谢谢你的解释,现在对我来说很有意义。你应该接受这个答案,表明它解决了问题。