[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/rest_parameters [Back]  [Original]

Parmetros Rest - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

Parmetros Rest

Baseline
Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since setembro de 2016.

A sintaxe de rest parameter (parmetros rest) nos permite representar um nmero indefinido de argumentos como um array.

In this article

Sintaxe

js
function(a, b, ...theArgs) {
  // ...
}

Descrio

Se o ltimo argumento nomeado de uma funo tiver prefixo com ..., ele ir se tornar um array em que os elemento de 0 (inclusive) at theArgs.length (exclusivo) so disponibilizados pelos argumentos atuais passados funo.

No exemplo acima, theArgs ir coletar o terceiro argumento da funo (porqu o primeiro mapeado para a, e o segundo para b) e assim por diante em todos os argumentos consecutivos.

Diferena entre rest parameters e arguments object

H trs diferenas principais entre rest parameters e os arguments objects:

  • rest parameters so os nicos que no foram atribuidos a um nome separado, enquanto os arguments object contm todos os argumentos passados para a funo;
  • o objeto arguments no um array, enquanto rest parameters so instncias Array, isso significa que mtodos como sort, map, forEach ou pop podem ser aplicados diretamente;
  • o objeto arguments possui a funcionalidade adicional de especificar ele mesmo (como a propriedade callee).

De arguments para array

Rest parameters foram criados para reduzir o cdigo padro que foi induzida pelos argumentos

js
// 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 nmero de elementos usando a propriedade length:

js
function fun1(...theArgs) {
  console.log(theArgs.length);
}

fun1(); // 0
fun1(5); // 1
fun1(5, 6, 7); // 3

No prximo exemplo, ns usamos o rest parmetro para buscar argumentos do segundo parmetro para o fim. Ns multiplicamos eles pelo primeiro parmetro:

js
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 prximo exemplo mostra como voc pode usar metodos do Array em rest params, mas no no objeto arguments:

js
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.

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-function-definitions

Compatibilidade

Veja tambm


Web Proxy Viewer  |  New URL  |  Original Page