2

私はいくつかのjavascriptを学習しようとしていますが、その理由については完全には答えられません:

var a = 'xyz';
console.log('Example: ' + (a === 'xyz') ? 'A' : 'B');

例:Aではなく「A」を返します。しかし、そのように全体を置くと:

var a = 'xyz';
console.log('Example: ' + ((a === 'xyz') ? 'A' : 'B'));

それは完璧に動作します。それは、最初のものは 'Example: ' 文字列をこの if で論理 + に入れるということですか?

4

3 に答える 3

7

これはifステートメントではなく、三項演算子です。

しかし基本的に、はい、何が起こっているかというと、最初にこの部分が評価されます:

(a === 'xyz')

...そしてtrueまたはになりfalseます。次に、これが行われます(仮定しましょうtrue):

'Example: ' + true

...その結果:

'Example: true'

...そして、これが行われます:

'Example: true' ? 'A' : 'B'

...'A'文字列が空白ではないため、これは真実です。

これは+、三項 ( ? :) よりも優先順位が高いためです。

于 2013-06-19T17:26:23.440 に答える
3

まさに、ご覧のとおり+?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

したがって、ブール値との最初の式文字列連結が(a === 'xyz')最初に実行され、次に空でない文字列がブール値として評価され、true「A」が最終出力になります。

2 番目の式の括弧では、?演算子が の前に強制的に実行され+ます。

于 2013-06-19T17:25:59.077 に答える
1

括弧で始まらない場合(a === 'xyz') ? 'A' : 'B'、JS エンジンは+演算子を優先し、truey テストを として解釈し'Example: ' + (a === 'xyz')、A を返します。

trueまたは のいずれかと連結された文字列falseは依然として trueであるため、等値テストが false の場合でも A が返されます。

于 2013-06-19T17:26:39.633 に答える