los parámetro de descanso La sintaxis permite que una función acepte un número indefinido de argumentos como array, proporcionando una forma de representar funciones variadas en JavaScript.

Sintaxis

functionf(a, b,...theArgs)// ...

Descripción

El último parámetro de una definición de función puede tener el prefijo “...“(tres caracteres U + 002E FULL STOP), lo que hará que todos los parámetros restantes (proporcionados por el usuario) se coloquen dentro de un JavaScript” estándar ” array.. Solo el último parámetro de una definición de función puede ser un parámetro de reposo.

functionmyFun(a,  b,...manyMoreArgs)
  console.log("a", a)
  console.log("b", b)
  console.log("manyMoreArgs", manyMoreArgs)myFun("one","two","three","four","five","six")// Console Output:// a, one// b, two// manyMoreArgs, ["three", "four", "five", "six"]

Referencia rápida

Una definición de función solo puede tener una ...restParam.

foo(...one,...wrong,...wrong)

El resto del parámetro debe ser el último parámetro en la definición de la función.

foo(...wrong, arg2, arg3)
foo(arg1, arg2,...correct)

La diferencia entre los parámetros de reposo y el arguments objeto

Hay tres diferencias principales entre los parámetros de reposo y el arguments objeto:

  • los arguments el objeto es no es real array, mientras que los parámetros de descanso son Array instancias, es decir, métodos como sort, map, forEach o pop se puede aplicar sobre él directamente;
  • los arguments El objeto tiene una funcionalidad adicional específica para sí mismo (como el callee propiedad).
  • los ...restParam agrupa todos los parámetros adicionales en un solo array, por lo tanto, no contiene ningún argumento con nombre definido antes de los ...restParam. Mientras que el arguments El objeto contiene todos los parámetros, incluidas todas las cosas en el ...restParamNaciones Unidasempaquetado.

De argumentos a un array

Los parámetros de descanso se introdujeron para reducir el código repetitivo que se usaba comúnmente para convertir un conjunto de argumentos en un array.

// Before rest parameters, "arguments" could be converted to a normal array using:functionf(a, b)let normalArray =Array.prototype.slice.call(arguments)// -- or --let normalArray =[].slice.call(arguments)// -- or --let normalArray = Array.from(arguments)let first = normalArray.shift()// OK, gives the first argumentlet first = arguments.shift()// ERROR (arguments is not a normal array)// Now, you can easily gain access to a normal array using a rest parameterfunctionf(...args)let normalArray = args
  let first = normalArray.shift()// OK, gives the first argument

Ejemplos de

Usar parámetros de descanso

En este ejemplo, el primer argumento se asigna a a y el segundo a b, por lo que estos argumentos con nombre se utilizan normalmente.

Sin embargo, el tercer argumento, manyMoreArgs, será un array que contiene los 3rd, 4th, 5th, 6thnorteth – tantos argumentos que incluya el usuario.

functionmyFun(a, b,...manyMoreArgs)
  console.log("a", a)
  console.log("b", b)
  console.log("manyMoreArgs", manyMoreArgs)myFun("one","two","three","four","five","six")// a, "one"// b, "two"// manyMoreArgs, ["three", "four", "five", "six"] <-- notice it's an array

A continuación, aunque solo hay un valor, el último argumento se coloca en un array.

// using the same function definition from example abovemyFun("one","two","three")// a, "one"// b, "two"// manyMoreArgs, ["three"] <-- notice it's an array, even though there's just one value

A continuación, no se proporciona el tercer argumento, pero manyMoreArgs sigue siendo un array (aunque uno vacío).

// using the same function definition from example abovemyFun("one","two")// a, "one"// b, "two"// manyMoreArgs, [] <-- yip, still an array

Longitud del argumento

Ya que theArgs es un array, un recuento de sus elementos viene dado por el length propiedad:

functionfun1(...theArgs)
  console.log(theArgs.length)fun1()// 0fun1(5)// 1fun1(5,6,7)// 3

Usar parámetros de descanso en combinación con parámetros ordinarios

En el siguiente ejemplo, se utiliza un parámetro de descanso para recopilar todos los parámetros después del primer parámetro en un array. Cada uno de los valores de los parámetros recogidos en el array luego se multiplica por el primer parámetro, y el array es regresado:

functionmultiply(multiplier,...theArgs)return theArgs.map(element=>return multiplier * element
  )let arr =multiply(2,15,25,42)
console.log(arr)// [30, 50, 84]

Los parámetros de descanso son matrices reales; el objeto de argumentos no lo es.

Array Los métodos se pueden utilizar en parámetros de descanso, pero no en el arguments objeto:

functionsortRestArgs(...theArgs)let sortedArgs = theArgs.sort()return sortedArgs


console.log(sortRestArgs(5,3,7,1))// 1, 3, 5, 7functionsortArguments()let sortedArgs = arguments.sort()return sortedArgs  // this will never happen

console.log(sortArguments(5,3,7,1))// throws a TypeError (arguments.sort is not a function)

Usar Array métodos en el arguments objeto, debe convertirse en un objeto real array primero.

functionsortArguments()let args = Array.from(arguments)let sortedArgs = args.sort()return sortedArgs

console.log(sortArguments(5,3,7,1))// 1, 3, 5, 7

Especificaciones

Especificación
Especificación del lenguaje ECMAScript (ECMAScript)
# seg-función-definiciones

Compatibilidad del navegador

Escritorio Móvil
Cromo Borde Firefox explorador de Internet Ópera Safari WebView Android Chrome Android Firefox para Android Opera Android Safari en IOS Internet de Samsung
rest_parameters 47 12 15 No 34 10 47 47 15 34 10 5,0
destructuring 49 79 52 No 36 10 49 49 52 36 10 5,0

Ver también