22

重複の可能性:
Javascript構文:コンマとはどういう意味ですか?

この記事を読んでいるときにコードに出くわしました(Ctrl+F検索してくださいAndre Breton):

//function returning array of `umbrella` fibonacci numbers
function Colette(umbrella) {
  var staircase = 0, galleons = 0, brigantines = 1, armada = [galleons, brigantines], bassoon;
  Array.prototype.embrace = [].push;

  while(2 + staircase++ < umbrella) {
    bassoon = galleons + brigantines;
    armada.embrace(brigantines = (galleons = brigantines, bassoon));
  }

  return armada;
}

x = (y = x, z)構成はどういう意味ですか?より具体的には、y = x, zどういう意味ですか?割り当てのように見え、コンマがあるので、私はそれをコンマ割り当てと呼んでいます。

Pythonでは、タプルの解凍(この場合はパッキング)を意味していました。ここでも同じですか?

4

3 に答える 3

23

これはコンマ演算子です。

コンマ演算子は、両方のオペランド(左から右へ)を評価し、2番目のオペランドの値を返します。

a、b、c、...、nが評価されたときの結果の値は、常に右端の式の値になりますが、チェーン内のすべての式は引き続き評価されます(左から右へ)。


したがって、あなたの場合、割り当ては引き続き評価されますが、最終的な値はになりますbassoon

結果:

galleons = brigantines
brigantines = bassoon
armada.embrace(basson)

詳細:Javascriptの「タプル」表記:そのポイントは何ですか?

于 2012-10-07T15:06:00.567 に答える
9

var構文では複数の代入が可能であるため、次のように表示されている場合は、1つのvarステートメントを使用して複数の変数を宣言しています。

var a, b, c;

この構文はコンマ演算子ではないことに注意しください


カンマ演算子として使用,できます。一連の式を評価するだけです。したがって、次の構文を見ると、一連の式が評価され、最後の式の戻り値が返されていることがわかります。

x = (y = x, z)

ペア内で、にx割り当てられy、次にz評価されてから返され、()に割り当てられxます。


この構文は不明確であり、ほとんどメリットがないことをお勧めします。

于 2012-10-07T15:07:07.657 に答える
9

コンマオペランドは、そのすべてのオペランドを評価し、最後のオペランドを返します。この場合、使用した場合は違いはありません

x = (y = x, z);

また

y = x;

x = z;

そのコード行を取り除くためにあります。

于 2012-10-07T15:07:48.310 に答える