Javascript AND或运算符和括号
在if和or语句中有正确触发代码的问题。我希望语句中的代码在defholdid变量等于“cb_SR”时运行,并且如果这些变量中的任何一个为true:altRighttargets、inRightTargets、safetyRightTargets。我自己检查了每个变量,它们都收到了我期望的值。声明如下: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 (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)?无论如何,谢谢你的帮助,如果没有你的评论,我是不会发现这个问题的,而且可能会让我一路头疼!谢谢你的解释,现在对我来说很有意义。你应该接受这个答案,表明它解决了问题。