回答:
ここでは多くのことが行われていますが、基本的にはコンマ演算子です。
コンマ演算子は、そのオペランドの両方を(左から右に)評価し、2番目のオペランドの値を返します。
このコード:
aaa = 1,2,3
同等です:
aaa = 1;
2;
3;
したがってaaa、暗黙的に宣言され、値1が割り当てられます。コンソールの出力は、最後のステートメント3の結果であることに注意してください。
このコード:
var bbb = 1,2,3
変数宣言のコンマは1行で複数の変数を宣言するために使用されるため、構文エラーです。MDNの記事で指摘されているように、
varステートメント内のコンマは式内に存在しないため、コンマ演算子ではないことに注意してください。むしろ、var複数のステートメントを1つに結合することはステートメントの特殊文字です。
したがって、このコードはおおよそ次のコードと同等です。
var bbb = 1;
var 2;
var 3;
もちろん、2は有効な識別子ではないため、その時点で失敗します。
このコード:
var bbb = (1,2,3)
数値は括弧で囲まれているため、最初に評価されることを除いて、最初のものと非常に似ています。したがって、これは大まかに次と同等です。
1;
2;
var bbb = 3;
=中にはvar bbb = 1;同じではありません=のようにaaa = 1;、彼らは文法で異なるプロダクション(AssignmentExpression対初期化子)から来て、ちょうど同じトークンを使用するように起こります- 。
a = 1, 2, 3よう(a = 1), 2, 3に評価されるa = 1; 2; 3(そして3を返す、たとえばb = (a = 1, 2, 3)3をbに割り当てる)のように括弧で囲むことができるということです。対照的に、a = (1, 2, 3)と評価1; 2; a = 3戻り3
(1 + 2) * 3、1 + 2が最初に評価され、その式の結果が残りの評価のために外側の式に置き換えられます。
コンマは、JavaScriptで複数の用途があります。式では:
a = 1, 2, 3;
これは、右側の引数を返すだけの演算子です。ただしvar、これは宣言の構文の一部でもあります。
var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...;
(ここ[...]で、その部分はオプションです)。あなたのvarそれは解析されませんので、宣言は、カンマの後に変数名が欠落しています。あなたはあなたが望む効果を得ることができます:
var a = (1, 2, 3);
括弧により、コンマは変数宣言間の区切り文字ではなく演算子として扱われます。
例では、コンマは2つのコンテキストで使用されています。
var ステートメントvarステートメントの構文は次のとおりです。
var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];
ここでは、コンマを使用して変数の名前と値のペアを区切ります。変数名の先頭を数字にすることはできないため、以下は機能しません(識別子名を参照)。
var bbb = 1, 2, 3;
// SyntaxError: Unexpected number
コンマ演算子は、そのオペランドの両方を(左から右に)評価し、2番目のオペランドの値を返します。次の式は次のように機能します。
aaa = 1, 2, 3;
aaa = 1, 2 利回り2
aaa = 1ため、最初に評価されることに注意してください=,2, 3 利回り3var bbb = (1, 2, 3);
(1, 2, 3)生成3されますbbbは値が割り当てられます3aaa = 1, 2, 3=>コンマ演算子は、以下の3つのステートメントを分離するために使用される:aaa=1、2および3。コンマ演算子の結果は、最後のステートメント3の値です。ただし、OPのスクリーンショットから明らかなように、aaaには値1が割り当てられています。この理由は、演算子の優先順位であり、カンマ演算子の優先順位が最も低くなります。
最初のケースでは:
aaa = 1,2,3
コンマは式の区切り文字として機能します。への割り当てを実行しaaa、それを計算2して破棄してから、計算3して破棄します。
2番目:
var bbb = 1,2,3
varキーワードは、後に次のことというのJavaScriptコンパイラに指示します,別の変数名でなければなりません。それは見つけられていないので、死んでギャグです。
var bbb = (1,2,3)
ここでは、コンパイラーは最初にそれを評価1して無視します。次に、それを評価2して無視します。次に評価さ3れ、スタックに残されるので、bbb
式を区切るためにコンマを使用することは一般的ではありませんが、for見た目などに役立つ場合があります。
for (i = 0, l = 10; i < l; i++) {
console.log(i);
}
var a1,a2,a3;3つのローカル変数を宣言するだけです。