2011-04-19 103 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 */ 
} 

對我來說更好。