Javascript AND OR 运算符和括号
Javascript AND OR operators and parentheses
在 if 和 or 语句中正确触发代码时遇到问题。当 defholdid var 等于“cb_SR”并且如果这些变量中的任何一个为真时,我希望语句中的代码为 运行:altRighttargets、inRightTargets、safetyRightTargets。我已经单独检查了每个变量,它们都收到了我期望的值。声明如下:
if (defholdid === "cb_SR" && (altRightTargets === true || inRightTargets === true || safetyRightTargets === true)) {
//code I want to trigger
};
我用每个单独的表达式检查了语句,我可以得到触发的代码,所以我认为我写错了语句。
谢谢,
确保您与 true
比较的变量实际上包含布尔值,而不是字符串 "true"
或 "false"
。如果它们包含这些字符串,与 true
的比较将始终为假。在您的 OR 分组的上下文中,该变量实际上被忽略了。
对于不同类型的值,严格相等运算符 ===
始终为假。但即使您更改为松散相等运算符 ==
,true == "true"
也将为假。将布尔值与另一种类型进行比较时,首先将布尔值转换为 0
或 1
,然后将其与其他值进行比较(可能会进行其他类型调整)。所以 true == "1"
为真,因为 1 == "1"
,但 true == "true"
为假,因为 1 == "true"
为假。正如this answer中所指出的,我们有以下比较布尔值和字符串的情况:
true == "true"; //false
true == "1"; //true
false == "false"; //false
false == ""; //true
false == "0"; //true
在 if 和 or 语句中正确触发代码时遇到问题。当 defholdid var 等于“cb_SR”并且如果这些变量中的任何一个为真时,我希望语句中的代码为 运行:altRighttargets、inRightTargets、safetyRightTargets。我已经单独检查了每个变量,它们都收到了我期望的值。声明如下:
if (defholdid === "cb_SR" && (altRightTargets === true || inRightTargets === true || safetyRightTargets === true)) {
//code I want to trigger
};
我用每个单独的表达式检查了语句,我可以得到触发的代码,所以我认为我写错了语句。
谢谢,
确保您与 true
比较的变量实际上包含布尔值,而不是字符串 "true"
或 "false"
。如果它们包含这些字符串,与 true
的比较将始终为假。在您的 OR 分组的上下文中,该变量实际上被忽略了。
对于不同类型的值,严格相等运算符 ===
始终为假。但即使您更改为松散相等运算符 ==
,true == "true"
也将为假。将布尔值与另一种类型进行比较时,首先将布尔值转换为 0
或 1
,然后将其与其他值进行比较(可能会进行其他类型调整)。所以 true == "1"
为真,因为 1 == "1"
,但 true == "true"
为假,因为 1 == "true"
为假。正如this answer中所指出的,我们有以下比较布尔值和字符串的情况:
true == "true"; //false
true == "1"; //true
false == "false"; //false
false == ""; //true
false == "0"; //true