Что означает "...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
является объектом массива.