【发布时间】:2019-06-12 10:11:17
【问题描述】:
例如,代替:
if (ext === "_st" || ext ==="_mt" || ext === "_00" ){
//do something
}
我直观地期望以下内容也有效:
if (ext === ("_st" || "_mt" || "_00" )){
//do something
}
但这不起作用。 有没有办法避免重复相同的(在这种情况下为“ext”)变量以获得更压缩和更高效的代码?
更新:我在提问前进行了搜索,前 10-15 条建议中没有出现任何“重复”问题。相反,StackOverflow 对不相关的 -false 重复项提出了错误的建议。
这是我的建议: 与其将问题标记为“重复”,为什么不将它们与答案合并到一个带有直观标题的问题中?
感谢您的回答。
更新 #2: 这不是重复的。建议的问题的答案仅涉及 OR 优化,而我的问题更笼统,它指的是“逻辑表达式”,而不是专门针对 OR。我刚刚提供了一个 OR 示例。我特意问的是有没有一种方法可以避免在逻辑语句中重复主变量,无论是OR、AND等。
例如:给定var1 == var2 == var3
if (ext === var1 && ext === var2 && ext === var3 ){
//do something
}
【问题讨论】:
-
使用数组:
[ "_st", "_mt", "_0" ].includes( ext ). -
@dllb 也一样,您如何期望
ext === "_st" && ext ==="_mt" && ext === "_00"返回除false之外的任何内容? -
如果您想要
&&条件的等效项,您可以使用Array#every而不是includes...没有通用答案,只有针对特定情况的特定答案。 -
并且发布副本本身也不错。其他问答已经包含答案,所以你的问题就这样解决了。无需为此抱怨。如果您之前没有发现……好吧,那会发生,没什么大不了的。
-
如果您想要同时拥有“ands”和“ors”(而不是仅仅查看数组是否包含某些内容),那么您正在编写一系列比较。我看不出如何在不指定比较双方的情况下编写比较。此外,如果您的问题不是重复的,因为在您的“真实”场景中,它并非都是“或”,为什么不只是消除混淆并在您的问题中设置一些条件“和”。这比把它们都变成“或”然后添加一段来解释这不是你真正的意思要清楚得多。
标签: javascript if-statement logical-operators