Что такое "..." (3 точки) в javascript?

Nicolas S.Xu спросил: 28 марта 2018 в 02:05 в: reactjs

Я узнал об этом из этого сообщения.

function StoreMixin(...stores) { // what is "..."
  var Mixin = {
    getInitialState() {
      return this.getStateFromStores(this.props);
    },
    componentDidMount() {
      stores.forEach(store =>
        store.addChangeListener(this.handleStoresChanged)
      );
      this.setState(this.getStateFromStores(this.props));
    },
    componentWillUnmount() {
      stores.forEach(store =>
        store.removeChangeListener(this.handleStoresChanged)
      );
    },
    handleStoresChanged() {
      if (this.isMounted()) {
        this.setState(this.getStateFromStores(this.props));
      }
    }
  };
  return Mixin;
}

Просьба пояснить, что такое "...", с примером кода. Спасибо!

1 ответ

Есть решение
acdcjunior ответил: 28 марта 2018 в 02:09

В этом примере ... является параметром Rest, синтаксис позволяет нам представлять неопределенное количество аргументов в виде массива.

Это несколько похоже (или нет: ), но это не то же самое, что синтаксис распространения.


В вашем примере аргумент stores внутри является массивом. Если function StoreMixin(...stores) называется как StoreMixin(1,2,3), то stores будет [1, 2, 3] и т. Д.

Nicolas S.Xu ответил: 28 марта 2018 в 02:21
Спасибо, это та часть, которая смущает меня. Поскольку синтаксис один и тот же, как Javascript узнает, хочу ли я поместить все параметры в массив (параметр Rest) или разбить объект на переменные (синтаксис распространения)? Если они оба используются в параметрах функции.
jfriend00 ответил: 28 марта 2018 в 02:29
@ NicolasS.Xu - Деструктурирование аргументов функций просто не тот же синтаксис. Легко для переводчика заметить разницу.
acdcjunior ответил: 28 марта 2018 в 02:29
На самом деле в аргументах функций объявлений могут использоваться только остальные параметры. Вы не можете использовать распространение там. Спред используется везде else , хотя.
Nicolas S.Xu ответил: 28 марта 2018 в 02:37
@acdcjunior, я вижу. "..." - то же самое, но это оператор "rest" в определении функции, "diff" используется при вызове функции. черт возьми ... Большое спасибо!
loganfsmyth ответил: 28 марта 2018 в 03:14
Лучше не думать об этом как о операторе. Это часть синтаксиса объявления функции в целом, и в этом контексте это может означать только одно. Распространение является частью синтаксиса вызовов и массивов, и в этом контексте многоточие может быть только распространено.