web-dev-qa-db-ja.com

ECMAScriptドキュメントのSpreadElementとは何ですか? MDNのSpread構文と同じですか?

ECMAScript仕様SpreadElement が記述されています

SpreadElement[Yield]:
...AssignmentExpression[In, ?Yield]

これは Spread syntax と同じですか?

スプレッド構文により、0個以上の引数(関数呼び出しの場合)または要素(配列リテラルの場合)が予期される場所で配列式や文字列などのイテラブルを展開したり、0以上の場所でオブジェクト式を展開したりできますキーと値のペア(オブジェクトリテラル用)が必要です。

構文

関数呼び出しの場合:

myFunction(...iterableObj);

配列リテラルの場合:

[...iterableObj, 4, 5, 6]

[〜#〜] mdn [〜#〜] で説明されていますか?

SpreadElementの使用例とは何か、またはスプレッド構文。 SpreadElementとスプレッドの構文が異なる場合、どのような方法で異なりますか?

43
guest271314

「拡散演算子」という用語は、「_...x_」のように見えるES6のさまざまな構文構造を指す「傘用語」の一種です。 MDNも同様です。

ただし、_..._は演算子ではないため、これは誤解を招きます(少なくとも、ECMAScript仕様で「演算子」という用語が使用されているという意味ではありません)。それはそれ以上の計算で使用できる値を生成しません。 _,_や_;_などのその他の句読点と比較したいのですが(これらも一種の関連性はありますが、コンテキストによって意味が異なります)。

「スプレッドオペレーター」という用語は次のことを指します。

  • Spread要素、_var arr = [a, b, ...c];_ :Spread要素は、反復可能(c)を新しい配列。これは[a,b].concat(c)のようなものと同等です。

  • Rest要素、_[a, b, ...c] = arr;_:構造化解除の内部では、_..._構成には逆の効果があります。それは、残りの要素を配列に収集します。ここの例は、

    _a = arr[0];
    b = arr[1];
    c = arr.slice(2);
    _

    (解体は配列だけでなく反復可能な値で機能するため、これは近似にすぎないことに注意してください)

  • fun(a, b, ...c):この構成 実際には仕様に名前がありません 。しかし、spread要素と同様に機能します。イテラブルを引数のリストに展開します。
    これはfunc.apply(null, [a, b].concat(c))と同等です。

    正式名称の欠如が人々が「スプレッド演算子」を使い始めた理由かもしれません。私はおそらくそれを「普及論」と呼ぶでしょう。

  • 残りのパラメータ:function foo(a, b, ...c) :残りの要素と同様に、残りのパラメータは渡された残りの引数を収集します関数とそれらをcの配列として使用できるようにします。 ES2015の仕様では、実際にはBindingRestElementという用語を使用してこの構造を指します。

関連する質問:


:もし私たちがvery知識を持っているなら、変数宣言(_var [a, b, ...c] = d;_)と単純な割り当て(_[a, b, ...c] = d;_)、仕様によると。

88
Felix Kling

SpreadElementは、配列リテラル内にある場合の引数と一緒に「オペレーター」を広げるためのES6文法の単なる名前です。

SpreadElement[Yield]:
    ... AssignmentExpression[In, ?Yield]

したがって、SpreadElement in [a, b, ...c]...c;スプレッド「オペレーター」は...。 (同じ意味で実際の演算子ではないため、引用符を怖がらせます。例:-です。)

文法コンテキストが異なるため、関数呼び出しで使用される文法規則の名前は異なります(ArgumentListの1種類にすぎません)。

0
Amadan