O que são Rest Parameters e como eles diferem do objeto arguments?
Na lição anterior, você aprendeu como trabalhar com o objeto
arguments que é um objeto semelhante a um array contendo os valores dos argumentos passados para a função.
function logArgs() {
for (const arg of arguments) {
console.log(arg);
}
}
logArgs(1, 2, 3);
// result:
// 1
// 2
// 3
Embora esta seja uma forma válida de acessar e trabalhar com um conjunto variável de argumentos de uma função, aplicações modernas em JavaScript usarão a sintaxe do parâmetro rest em vez disso.
Aqui está um exemplo atualizado usando a sintaxe do parâmetro rest em vez do objeto arguments:
function logArgs(...args) {
for (const arg of args) {
console.log(arg);
}
}
logArgs(1, 2, 3);
// result:
// 1
// 2
// 3
Este exemplo atualizado não faz mais referência direta ao objeto arguments. Em vez disso, o último parâmetro da definição da função tem três pontos na frente. Isso faz com que esse parâmetro rest seja colocado dentro de um objeto Array. Você pode nomear esse parâmetro rest como quiser. Apenas certifique-se de que ele seja o último parâmetro na definição da função assim:
function exampleFunction(a, b, ...restOfArgs) {
// some code here
}
function anotherFunction(x, y, ...theArgs) {
// some code here
}
Existem algumas restrições adicionais ao lidar com a sintaxe do parâmetro rest. Uma restrição é que definições de função podem ter apenas um parâmetro rest. Então o exemplo a seguir seria considerado inválido.
// Won't work
function badFunction(...args, ...moreArgs) {
// some code here
}
A próxima restrição é que vírgulas finais não são permitidas após o parâmetro rest: function exampleFunction(a, b, ...restOfArgs, ).
Outra restrição é que o parâmetro rest não pode ter um valor padrão. Caso contrário, um SyntaxError será lançado.
function badFunction(...args = [1,2]){
// some code here
}
Quais são algumas diferenças entre o objeto arguments e os parâmetros rest?
Uma diferença chave é que o objeto arguments não é um array real, então ele não suporta métodos como includes, pop e push. Mas o parâmetro rest é uma instância de Array. Então você pode usar métodos válidos de array embutidos sem precisar convertê-lo para um array real primeiro.
function hasCat(...args) {
return args.includes("cat");
}
console.log(hasCat("dog", "chicken", "cat")); // true
console.log(hasCat("dog", "chicken", "horse")); // false
Este módulo não possui perguntas. Marque como concluído.