-
JAVASCRIPT > arguments passés en tableau
router.route('/:id') .put((...args) => controller.update(...args)) .get((...args) => controller.findById(...args));
…is called the spread operator, means "any number of values". For example, you could pass null or 1,2,3,4 - it would not matter and the method is smart enough to deal with it. With respect to(...args) =>
,...args
is a rest parameter. It always has to be the last entry in the parameter list and it will be assigned an array that contains all arguments that haven’t been assigned to previous parameters. It’s basically the replacement for the arguments object. Instead of writingfunction max() { var values = Array.prototype.slice.call(arguments, 0); // ... } max(1,2,3);
you can write
function max(...value) { // ... } max(1,2,3);
Also, since arrow functions don’t have an
arguments
object, this is the only way to create variadic (arrow) functions.As controller.update(…args), see What is the meaning of "foo(…arg)" (three dots in a function call)? .
Essentially, what’s being done is this:
.put((a, b, c) => controller.update(a, b, c))
Of course, what if we want 4 parameters, or 5, or 6? We don’t want to write a new version of the function for all possible quantities of parameters.
The spread operator (…) allows us to accept a variable number of arguments and store them in an array. We then use the spread operator again to pass them to the
update
function:.put((...args) => controller.update(...args))
This is transparent to the
update
function, who receives them as normal arguments.The meaning of “…args”
function sum(x, y, z) { return x + y + z; } const numbers = [1, 2, 3]; console.log(sum(...numbers)); // expected output: 6