在if和or语句中正确触发代码时出现问题。我希望语句中的代码在defholdid var等于"0"时运行;cb_SR";如果这些变量中有任何一个为真:altRighttargets、inRightTargets、safetyRightTargets。我自己检查了每个变量,它们都收到了我期望的值。以下是声明:
if (defholdid === "cb_SR" && (altRightTargets === true || inRightTargets === true || safetyRightTargets === true)) {
//code I want to trigger
};
我用每个单独的表达式检查了语句,我可以得到要触发的代码,所以我认为我写的语句不正确。
谢谢,
确保与true
进行比较的变量实际包含布尔值,而不是字符串"true"
或"false"
。如果它们包含这些字符串,则与true
的比较将始终为false。在OR分组的上下文中,该变量实际上被忽略了。
对于不同类型的值,严格相等运算符===
将始终为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