В чем смысл "foo (... arg)" (три точки в вызове функции)?

Может ли кто-нибудь сказать, что такое "..." в приведенном ниже коде в примере "Вступление к Angular"?

getHeroes() {
    this.backend.getAll(Hero).then( (heroes: Hero[]) => {
      this.logger.log(`Fetched ${heroes.length} heroes.`);
      this.heroes.push(...heroes); // fill cache
    });

Ответ 1

Это не имеет ничего общего с jQuery или Angular. Это функция, которая была введена в ES2015.

Это конкретное использование ... фактически не имеет официального имени. Имя, которое соответствует другим потребностям, будет "распространенным аргументом" (общий термин будет "синтаксис распространения" ). Он "взрывает" (распространяется) итерабельность и передает каждое значение в качестве аргумента функции. Ваш пример эквивалентен:

this.heroes.push.apply(this.heroes, Array.from(heroes));

Кроме того, что более кратким, другое преимущество ... заключается в том, что его можно более легко использовать с другими конкретными аргументами:

func(first, second, ...theRest);

// as opposed to the following or something similar:
 func.apply(null, [first, second].concat(Array.from(heroes)));