你能缩短一个'if'语句,其中某个变量可能是多个事物

时间:2015-09-25 12:59:16

标签: javascript operators

因为我有时需要像

这样的if语句
if (variable == 'one' || variable == 'two' || variable == 'three') { 
    // code
}

我想知道你是否可以写得更短,如:

if (variable == ('one' || 'two' || 'three')) {
    // code
}

3 个答案:

答案 0 :(得分:5)

或..

if (~['one', 'two', 'three'].indexOf(variable))

任何有很多方法去皮肤的猫

~ 按位NOT ...所以-1变为0,0变为-1,1变为-2等等

所以...~indexOf是" truthy"当indexOf为0或更大时,即找到值...

基本上它是我可能不会在其他人阅读的代码中使用的快捷方式,因为超过一半会抓住他们的头脑并且想知道代码做了什么:p

答案 1 :(得分:3)

你可以尝试:

if(variable in {one:1, two:1, three:1})

或:

if(['one', 'two', 'three'].indexOf(variable) > -1)

或在ES6中(现在在最近的浏览器中本地工作):

if(new Set(['one', 'two', 'three']).has(variable))

请注意,解决方案2将与数组的大小成线性比例,因此如果要检查的值超过几个,则不是一个好主意。

答案 2 :(得分:1)

不,这种多重比较没有捷径。如果您尝试它,它将计算表达式('one' || 'two' || 'three')的值,然后将其与变量进行比较。

您可以将值放在数组中并查找它:

if ([ 'one', 'two', 'three' ].indexOf(variable) != -1) {
    // code
}

您可以使用开关:

switch (variable) {
  case 'one':
  case 'two':
  case 'three':
    // code
}

您可以在对象属性中查找值(但对象值只是虚拟对象以允许属性存在):

if (varible in { 'one': 1, 'two': 1, 'three': 1 }) {
    // code
}