2016-05-11 3 views
-7

は、私はこのようないくつかのコードを持っている:Does ||オペレータはさらに連結を無効にしますか?

a = "string1" + b || c + "string2"; 

そして、それは実行だときの端をオフに残っているstring2のを除いて意図したとおりに働いています。

おそらくかっこでこの作業を行う方法はありますか?それとも別の方法ですか?

編集:コードが文字列1を連結するためのもので、結果はb || cとstring2を一緒に使用します。

+6

は ''、おそらくあなたはそれを試してみましたか? – j08691

+0

これは 'a =(" string1 "+ b)と同じように解析されます。 (c + "string2"); '本当にそれが欲しかったですか?そうでなければ、コードは - "かっこ付き"、またはそうでなければJSに何を*すべきかのヒントを与える必要があります。 – user2864740

+1

[オペレータ優先順位](https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Guide/Expressions_and_Operators#Operator_precedence) – hindmost

答えて

2

+は、higher precedence||よりも大きい。これが意味することは、あなたのコードは、これを効果的に意味していることである:

var temp1 = "string1" + b; 
var temp2 = c + "string2"; 
a = temp1 || temp2; 

あなたは文字列は、"string1"で始まる"string2"で終わり、途中でbまたはcのいずれかを持つようにしたい場合は、あなたが||セクションをラップすることができます連結の前に評価されることを保証するためにかっこを使用します。

a = "string1" + (b || c) + "string2"; 

例:?括弧付き

function log(msg) { 
 
    document.querySelector('pre').innerText += msg + '\n'; 
 
} 
 

 
var a; 
 
var b = false; 
 
var c = "__C__"; 
 
a = "string1" + (b || c) + "string2"; 
 
log(a); 
 

 
b = "__B__"; 
 
a = "string1" + (b || c) + "string2"; 
 
log(a);
<pre></pre>

+0

意味があります。説明をありがとう。しかし、私はその質問をする前にその解決策を試してみました。 – user3055938

+0

@ user3055938うまくいくはずです。私はちょうどあなたが望むように正確に行う例を追加しました。コードがこのように動作しない場合は、何か別のことが起こっています。 –

+0

@ user3055938:どうしたらいいですか?それは 'b || c' *の結果が期待されましたか? –

関連する問題