Esta tradução está incompleta. Ajude atraduzir este artigo.
This is a new technology, part of the ECMAScript 2015 (ES6) standard.
This technology's specification has been finalized, but check the compatibility table for usage and implementation status in various browsers.
A sintaxe de rest parameter (parâmetros rest) nos permite representar um número indefinido de argumentos em um array.
Sintaxe
function(a, b, ...theArgs) { // ... }
Descrição
Se o último argumento nomeado de uma função tiver prefixo com ...
, ele irá se tornar um array em que os elemento de 0 (inclusive) até theArgs.length (exclusivo) são disponibilizados pelos argumentos atuais passados à função.
No exemplo acima, theArgs
irá coletar o terceiro argumento da função (porquê o primeiro é mapeado para a
, e o segundo para b
) e assim por diante em todos os argumentos consecutivos.
Diferença entre rest parameters e arguments
object
Há três diferenças principais entre rest parameters e os arguments
objects:
- rest parameters são os únicos que não foram atribuidos a um nome separado, enquanto os
arguments
object contêm todos os argumentos passados para a função; - o objeto
arguments
não é um array, enquanto rest parameters são instânciasArray
, isso significa que métodos comosort
,map
,forEach
oupop
não podem ser aplicados diretamente; - o objeto
arguments
possui a funcionalidade adicional de especificar ele mesmo (como a propriedadecallee
).
De arguments para array
Rest parameters foram criados para reduzir o código padrão que foi induzida pelos argumentos
// Antes rest parameters, o seguinte codigo pode ser encontrado function f(a, b){ var args = Array.prototype.slice.call(arguments, f.length); // ... } // esse é o equivalente function(a, b, ...args) { }
Exemplos
Como theArgs
é um array, você pode pegar número de elementos usando a propriedade length
:
function fun1(...theArgs) { console.log(theArgs.length); } fun1(); // 0 fun1(5); // 1 fun1(5, 6, 7); // 3
No próximo exemplo, nós usamos o rest parâmetro para buscar argumentos do segundo parâmetro para o fim. Nós multiplicamos eles pelo primeiro parâmetro:
function multiply(multiplier, ...theArgs) { return theArgs.map(function (element) { return multiplier * element; }); } var arr = multiply(2, 1, 2, 3); console.log(arr); // [2, 4, 6]
O próximo exemplo mostra como você pode usar metodos do Array em rest params, mas não no objeto arguments
:
function sortRestArgs(...theArgs) { var sortedArgs = theArgs.sort(); return sortedArgs; } console.log(sortRestArgs(5,3,7,1)); // Exibe 1,3,5,7 function sortArguments() { var sortedArgs = arguments.sort(); return sortedArgs; // isso nunca irá ocorrer } // throws a TypeError: arguments.sort is not a function console.log(sortArguments(5,3,7,1));
a fim de usar o objeto arguments
, você precisará converte-lo para um array antes.
Especificações
Especificações | Status | Comentário |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Function Definitions' in that specification. |
Standard | Initial definition. |
Compatibilidade
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 47 | (Yes) | 15.0 (15.0) | Não suportado | Não suportado | Não suportado |
Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | Não suportado | 45 | 15.0 (15.0) | Não suportado | Não suportado | Não suportado | 47 |