Qu'est-ce que SpreadElement dans la documentation ECMAScript? Est-ce la même chose que l'opérateur Spread chez MDN?

À la spécification ECMAScript, SpreadElement est décrit

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

Est-ce le même que l' Spread operator

L'opérateur de propagation permet d'étendre une expression dans les endroits où plusieurs arguments (pour les appels de fonction) ou plusieurs éléments (pour les littéralités de tableau) ou plusieurs variables (pour l'affectation de déstructuration) sont attendus.

Syntaxe

Pour les appels de fonctions:

 myFunction(...iterableObj); 

Pour les littéraux de tableaux:

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

Décrit dans la documentation MDN ?

Quels sont les cas d'utilisation de SpreadElement et, ou, l' Spread operator ; Et si l' Spread operator SpreadElement et Spread operator est différent, dans lesquelles les manières spécifiques diffèrent-elles?

Le terme «opérateur étendu» est un «terme générique» qui fait référence à diverses constructions syntaxiques dans ES6 qui ressemblent à ...x . MDN fait de même.

Cependant, ceci est erroné, car ... n'est pas un opérateur (au moins pas dans le sens où la spécification ECMAScript utilise le terme "opérateur"). Il ne génère pas une valeur qui peut être utilisée dans d'autres calculs. Je préfère la comparer à d'autres ponctuateurs, tels que , ou ; (Qui sont également très liés mais ont une signification différente dans un contexte différent).

Le terme «opérateur de répartition» pourrait se référer à:

  • Élément propagation, var arr = [a, b, ...c]; : L'élément de propagation étend le iterable ( c ) dans le nouveau tableau. Cela équivaut à quelque chose comme [a,b].concat(c) .

  • Elément de repos, [a, b, ...c] = arr; : la déstructuration intérieure, la construction ... a l'effet inverse: elle collecte les éléments restants dans un tableau. L'exemple ici équivaut à

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

    (Notez que ce n'est qu'une approximation, car la déstructuration fonctionne sur toute valeur itérative, pas seulement des tableaux)

  • fun(a, b, ...c) : cette construction n'a pas de nom dans la spécification . Mais cela fonctionne très semblable à celui des éléments de propagation: il étend un itératif dans la liste des arguments.
    Il serait équivalent à func.apply(null, [a, b].concat(c)) .

    L'absence d'un nom officiel pourrait être la raison pour laquelle les gens ont commencé à utiliser "spread operator". Je l'appellerais probablement «argument répandu».

  • Paramètre de repos: function foo(a, b, ...c) : semblable à celui des éléments de repos, le paramètre restant recueille les arguments restants passés à la fonction et les rend disponibles comme tableau dans c . L' BindingRestElement utilise le terme BindingRestElement pour se référer à cette construction.

Questions connexes:

  • Étendre l'opérateur contre le paramètre de repos dans ES2015 / es6
  • Utilisation de l'opérateur de répartition plusieurs fois en javascript?

: Si nous sommes très pédantes, nous devrions même distinguer une déclaration de variable ( var [a, b, ...c] = d; ) et une affectation simple ( [a, b, ...c] = d; ), Selon la spécification.

SpreadElement est juste un nom dans la grammaire ES6 pour se propager "opérateur" avec son argument dans un littéral Array:

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

Donc, SpreadElement dans [a, b, ...c] est ...c ; L'opérateur "spread" est ... (Citations effrayantes car ce n'est pas un opérateur réel dans le même sens que, par exemple - est.)

Le nom de la règle de grammaire utilisée dans les appels de fonction sera différent, car il s'agit d'un contexte grammatical différent (c'est juste un type de ArgumentList ).