多AND或OR运算符Javascript

多AND或OR运算符Javascript,javascript,Javascript,我想知道这样写是否正确,我是否正确使用了括号 *这是国家/地区重定向弹出窗口的代码。countryCode变量是API检测到的用户所在的国家,localStorage.country是用户在网站上所在的国家 请忽略逻辑,我只需要知道if语句是否可以用这种方式编写 if((countryCode == 'sg/' && localStorage.country != "sg/") || (countryCode == 'ie/' && local

我想知道这样写是否正确,我是否正确使用了括号

*这是国家/地区重定向弹出窗口的代码。countryCode变量是API检测到的用户所在的国家,localStorage.country是用户在网站上所在的国家

请忽略逻辑,我只需要知道if语句是否可以用这种方式编写

if((countryCode == 'sg/' && localStorage.country != "sg/") ||
(countryCode == 'ie/' && localStorage.country != "ie/") ||
(countryCode == 'my/' && localStorage.country != "my/")){
    /**  Country Redirect Pop Up **/
}

当然,代码没有问题。。。它将检查第一个选项、第二个选项或第三个选项是否为真

是,它是有效的,也可以这样写:

let acceptedCountryCodes = ['sg/', 'ie/', 'my/'];
if(countryCode !== localStorage.country && acceptedCountryCodes.includes(countryCode)){
    /**  Country Redirect Pop Up **/
}

代码目前没有问题

在这种情况下不需要换行括号,因为AND&&运算符的优先级高于OR | |运算符

请看以下示例: 假与真| |假与真=假


上述示例类似于false&&true | | false&&true,它简化为false | | false,因此最终结果为false。

谢谢。但如果我像这样去掉所有括号:ifcountryCode='sg/'&&localStorage.country!=sg/| | countryCode='ie/'&&localStorage.country!=ie/| | countryCode='my/'&&localStorage.country!=my/{/**Country Redirect弹出窗口**/}它还会工作吗?不会,因为OR和and运算符把它都搞乱了。例如:将这个代码粘贴到你的控制台中,你就会明白我的意思:如果9<10&&3>5 | | 4<5{console.logYES},代码的工作原理基本上是:如果9小于10,3大于5或4<5,那么代码的工作原理与你的不同want@codeRdevelopR&&比| |具有更高的优先级,因此无论是否使用附加括号,代码都可以使用相同的优先级。您的console.log示例将打印YES,但不是因为所述原因。有关运算符优先级规则的讨论,请参见。在任何情况下,代码都可以编写得更简单,如Richard Lovell的回答所示。为什么不直接使用if countryCode!==localStorage.country{?我想这是行不通的,因为如果我从日本访问该网站,而该网站没有日本版本该怎么办。这意味着countryCode将等于jp/和localStorage。country将仅为sg/、ie/或my/。在这种情况下,弹出窗口将弹出并要求将用户重定向到日本网站,但该网站不可用。我想这是行不通的因为如果我从日本访问该网站,而该网站没有日本版本,那么该怎么办?这意味着countryCode将等于jp/和localStorage。country将仅为sg/、ie/或my/。在这种情况下,弹出窗口将弹出并要求将用户重定向到日本网站,该网站不可用且优先级高于| |,因此代码在有括号或没有括号的情况下都是一样的。但你说得对,它可以简化。请参阅Richard Lovell的答案,以了解考虑有效国家列表的示例,以及运算符优先级规则的讨论。我可以知道,如果语句被接受,您将如何编写CountryCode不包括udecountryCode?!已接受国家代码。IncludeCountryCode