Este equipo redactor ha pasado mucho tiempo buscando para dar solución a tu interrogante, te ofrecemos la solución así que nuestro deseo es resultarte de gran apoyo.
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 sonArray
instancias, es decir, métodos comosort
,map
,forEach
opop
se puede aplicar sobre él directamente; - los
arguments
El objeto tiene una funcionalidad adicional específica para sí mismo (como elcallee
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 elarguments
El objeto contiene todos los parámetros, incluidas todas las cosas en el...restParam
– Naciones 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, 6th … norteth – 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
- Sintaxis de propagación (también ‘
...
‘) - Objeto de argumentos
- Formación
- Funciones
- Propuesta original en ecmascript.org
- Objeto de argumentos de JavaScript y más
- Cesión de desestructuración
No se te olvide compartir este post si te fue útil.