Что означает "...args" (три точки) в определении функции?

Мне было действительно сложно читать этот синтаксис в Javascript:

router.route('/:id')
.put((...args) => controller.update(...args))
.get((...args) => controller.findById(...args));

Что значит ...args?

6 ответов

Решение

С уважением (...args) =>, ...args это параметр отдыха. Это всегда должна быть последняя запись в списке параметров, и ей будет назначен массив, содержащий все аргументы, которые не были назначены предыдущим параметрам.

Это в основном замена для arguments объект. Вместо того чтобы писать

function max() {
  var values = Array.prototype.slice.call(arguments, 0);
  // ...
}
max(1,2,3);

ты можешь написать

function max(...value) {
  // ...
}
max(1,2,3);

Кроме того, так как функции стрелок не имеют arguments объект, это единственный способ создания переменных функций (стрелки).


Как controller.update(...args), см. Что означает "foo(...arg)" (три точки в вызове функции)?,

По сути, то, что делается, это:

.put((a, b, c) => controller.update(a, b, c))

Конечно, что, если мы хотим 4 параметра, или 5, или 6? Мы не хотим писать новую версию функции для всех возможных количеств параметров.

Оператор спреда (...) позволяет нам принимать переменное число аргументов и сохранять их в массиве. Затем мы снова используем оператор распространения, чтобы передать их update функция:

.put((...args) => controller.update(...args))

Это прозрачно для update функция, которая получает их в качестве нормальных аргументов.

Значение "аргументов" (трех точек) - это оператор распространения Javascript.

function sum(x, y, z) {
  return x + y + z;
}

const numbers = [1, 2, 3];

console.log(sum(...numbers));
// expected output: 6

означает передать все значения (полезно, если есть неизвестное количество элементов)

образец кода

      console.log(sum(1, 2, 3, 4));  // expected output: 10

function sum(...allItems) { 
  let total = 0;
  for (const item of allItems) {
     total += item;
   }
   return total;
}

Он называется «параметр остатка», вы можете использовать параметр остатка для передачи неопределенного количества аргументов в виде массива, а функция может иметь только один параметр остатка, и он должен быть последним параметром для функции.

          function sum(...args){
    let output = 0;
     for(const num of args){
     output += num;
     }
        return output;
     }

     console.log(sum(2,4,8));

здесь он принимает аргумент, переданный сумме, в виде массива, суммирует вывод и возвращает его.

Если вы знаете некоторые синтаксисы Python, это точно так же, как . С *args(Python) является объектом кортежа, а Javascript не имеет кортежа, такого как Python, ..argsявляется объектом массива.

Другие вопросы по тегам