2011-04-19 101 views
0

我很好奇,是有没有更简单地说速记IF语句

if(myVar == myVal || myVar == myOtherVal){ /*...*/ } 

如方式:

if(myVar == myVal || myOtherVal){ /* */ } 

我知道,我所提出的代码只checkes看到myVar是否等于myValmyOtherVal不是null(未定义)和false

所以,正如我前面所说的,有没有写一个简单的方法

if(myVar == myVal || myVar == myOtherVal){ /*...*/ } 

只是好奇,想知道是否有某种JS​​速记if statment的工作方式类似于这一点,我已经错过了。

在此先感谢。

+3

这个问题是“更聪明!=更好”的好例子,我想。 :) – dkretz 2011-04-19 02:40:05

+1

'myVar == myVal || myVar == myOtherVal'是实现你的逻辑的标准和惯用的方式。试图做任何其他的只会是混乱和越野车,并会使维护你的代码的人(可能是你)恨你。 – 2011-04-19 02:51:03

+0

我只是在比较一个变量和其他一些变量时寻找更简单的方法。什么?我爱我自己。尽管偶尔我会拒绝让自己保持兴趣。 – mattsven 2011-04-19 02:53:13

回答

1

你可以使用数组:

if([myVal, myOtherVal].indexOf(myVar) + 1) { /* or > -1 or !== -1 */ } 

或者switch声明:

switch(myVar) { 
    case myVal: 
    case myOtherVal: 
      /* */ 
      break; 
} 

这些只有变量与两个以上的可能值,但是当真正适用。

+1

虽然我宁愿'[...] indexOf(myVar)!= -1'。花了我一秒钟才意识到,这甚至可以奏效。 – delnan 2011-04-19 02:15:14

+0

他想短和+ 1是1个字符短,所以... – Ryan 2011-04-19 02:16:04

+0

我当然希望他不是*绝望;) – delnan 2011-04-19 02:17:34

0

不是我所知道的。

如果您真的想要,您可以使用ArrayindexOf和一个数组。

0

Ternary Operator

result = ((myVar==myval)||(myVar==myOtherVal)) ? x : y; 

可以是:

if((myVar==myVal) || (myVar==myOtherVal)) 
    result = x; 
else 
    result = y; 

另外:

((myVar==myval)||(myVar==myOtherVal)) ? someFunction() : otherFunction(); 

是一样的:

if((myVar==myVal) || (myVar==myOtherVal)) 
    someFunction(); 
else 
    otherFunction(); 
+0

但要小心,三元运算符可能会混淆(即使是经验丰富的开发人员),除了最简单的情况外... – maerics 2011-04-19 02:18:45

+1

That..doesn't工作。它基本上是我上面强调的......也许我错过了什么? – mattsven 2011-04-19 02:20:57

+0

也许我是那个想念一些东西的人,但是我给你的代码和你的例子几乎一样?我只是改变它,以便它做了/*...*/以外的其他示例。 – Pete 2011-04-19 02:27:06

0

另一种方法是使用& &为 “锦衣卫”:

(myVar == myVal || myVar == myOtherVal) && /* expression */ 

但我不建议这样做。您的代码应该很容易阅读和维护,因此:

if (myVar == myVal || myVar == myOtherVal) { 
    /* do stuff */ 
} 

对我来说更好。