JavaScript中是否有办法避免在逻辑表达式中重复相同的变量?

时间:2019-06-12 10:11:17

标签: javascript if-statement logical-operators

例如,代替:

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
}

2 个答案:

答案 0 :(得分:-2)

var ext = "_00";
if (/^_st$|^_mt$|^_00$/.test(ext) ){
    console.log("do something");
   //do something
}

使用正则表达式是可能的。

说明: 每个比较用|(或)分隔,并括在^和$中以完全匹配,否则将在其他位置匹配。

答案 1 :(得分:-2)

let ext = "_mt";

if( ext.match( /_st|_mt|_00/g ) ) {
  console.log("Yes : type 1");
}


if( ["_st", "_mt", "_00"].includes( ext ) ) {
  console.log("Yes : type 2");
}

正如@Shily所说,您也可以使用数组和这种正则表达式