2016-04-03 13 views
0

文字列が 'foo'または 'bar'と等しい場合は、下のテストからtest4がこれを実現する最善の方法だと思われますが、 test3が最良のメソッドですが、falseを返します。strがfooまたはbarと等しいかどうかを確認するJavaScriptがチェックされている

これはなぜ偽を返すのですか?また、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

||オペレータは、テストが期待する何をあなたの3番目のテストのように式を記述することはできません。それは構文的には正しかったが、意図したものとは意味的に異なります。

最後のテストは、単純に書くことができます。

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

? :オペレータのための必要はありません。上記の式の結果は、すでにtrueまたはfalseのいずれかになります。これは、||の両端がブール値を返すためです。

さらに説明するために、

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

は最初||式を評価します。それはarr[0]を評価し、その部分式の結果ではないfalsy(ない0""NaNfalsenull、またはundefined)であるならば、||の値はarr[0]があるものは何でもあります。それ以外の場合、||の値は'f'です。そのときだけ、==の比較が行われ、strは、と比較され、arr[0]および'f'の1つと比較されます。

+1

1回目と2回目のテストと同じです。 ;-) – RobG

+0

すばらしい説明ありがとう。 – ak85

2

私が使用します。

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

をあなたは、平等が既にtrueまたはfalse返し? :を使用する必要はありません。