36

在 Javascript 中阅读这种语法对我来说真的很困惑:

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

...args是什么意思?

4

4 回答 4

47

相对于(...args) =>...args是一个休息参数。它始终必须是参数列表中的最后一个条目,并且将为其分配一个数组,其中包含所有未分配给先前参数的参数。

arguments它基本上是object的替代品。而不是写

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

你可以写

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

此外,由于箭头函数没有argumentsobject,这是创建可变参数(箭头)函数的唯一方法。


作为controller.update(...args),请参阅“foo(...arg)”(函数调用中的三个点)的含义是什么?.

于 2017-02-12T15:45:30.997 回答
14

本质上,正在做的是:

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

当然,如果我们想要 4 个参数,或者 5 个,或者 6 个呢?我们不想为所有可能数量的参数编写函数的新版本。

扩展运算符( ) 允许我们接受可变数量的...参数并将它们存储在数组中。然后我们再次使用扩展运算符将它们传递给update函数:

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

这对函数是透明的,update函数将它们作为普通参数接收。

于 2017-02-12T06:00:18.520 回答
2

“...args”(三个点)的含义是Javascript 扩展运算符

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

const numbers = [1, 2, 3];

console.log(sum(...numbers));
// expected output: 6
于 2019-12-10T06:33:38.160 回答
0

如果你知道一些 Python 语法,它与*args. 由于*args(Python) 是元组对象,而 Javascript 没有像 Python 这样的元组,..args因此是一个数组对象。

于 2022-01-30T12:45:15.970 回答