2016-04-03 38 views
0

我試圖弄清楚如果一個字符串等於'foo'或'bar',從下面的測試看起來好像test4是實現這個最好的方法,但是我會想到test3是最好的方法,但是這返回false。javascript檢查str是否等於foo或是bar

爲什麼這會返回false,是否有更好的方法test4?

var arr = ['a','b','c','d','e']; 
 
var str = 'f'; 
 
var test; 
 
test = str == arr[0] ? true:false; 
 
console.log('test1',test); 
 
console.log('returns false'); 
 

 
test = str == 'f' ? true:false; 
 
console.log('test2',test); 
 
console.log('returns true'); 
 

 
test = str == (arr[0] || 'f') ? true:false; 
 
console.log('test3',test); 
 
console.log('returns false'); 
 

 

 
test = str == (arr[0] && 'f') ? true:false; 
 
console.log('test4',test); 
 
console.log('returns true'); 
 

 
test = (str == arr[0]) || (str == 'f') ? true:false; 
 
console.log('test5',test); 
 
console.log('returns true');

+0

您需要定義您的「最佳」標準。測試3和4做了非常不同的事情。 – RobG

回答

3

||運營商不會讓你寫一個表達式,如你的第三個測試,做測試所期待的。它在語法上是正確的,但在語義上與你打算做的不同。

進行最後的測試,可以簡單地寫:

test = (str == arr[0]) || (str == 'f'); 

沒有必要爲? :操作;上述表達式的結果將會是truefalse,因爲||的兩邊都返回布爾值。

爲了進一步解釋,

test = str == (arr[0] || 'f'); 

將首先評估||表達。它將評估arr[0],如果該子表達式的結果不是falsy(不0""NaNfalsenull,或undefined),那麼||的值就是arr[0]是。否則,||的值是'f'。只有這樣纔會對==進行比較,並將str進行比較,只有一個arr[0]'f'

+1

第一次和第二次測試相同。 ;-) – RobG

+0

很好的解釋謝謝。 – ak85

2

我會用:

var test = (str === 'foo' || str === 'bar'); 

你並不需要使用? :,平等已經返回truefalse

相關問題