O que é o objeto arguments?

Como você se lembra das lições e workshops anteriores, você pode criar funções com vários parâmetros e chamar essa função com argumentos. Aqui está um lembrete:
// function definition
function getSum(num1, num2) {
  return num1 + num2;
}

// function call
getSum(3, 4); // 7
Mas e se você tiver uma função que é chamada com mais argumentos do que foi definida para aceitar?
// function definition
function getSum(num1, num2) {
  return num1 + num2;
}

// function call with extra argument
console.log(getSum(3, 4, 5)); // 7
JavaScript não gerará um erro neste caso. Em vez disso, ele ignorará o argumento extra e apenas somará os números 3 e 4. Funções que aceitam um número variável de argumentos são conhecidas como <dfn>funções variádicas</dfn>. Se você está trabalhando com funções variádicas, então pode utilizar o objeto arguments. Este objeto semelhante a um array contém os valores dos argumentos passados para a função. Aqui está um exemplo:
function logArgs() {
  for (const arg of arguments) {
    console.log(arg);
  }
}

logArgs(1, 2, 3);
// result:
// 1
// 2
// 3

logArgs("example"); // "example"
Como o objeto arguments é semelhante a um array, você pode acessar um argumento em um índice específico assim:
function getArg() {
  return arguments[1];
}

console.log(getArg(2, 4, 6)); // 4
Você também pode usar a propriedade length assim para obter o número de argumentos com que a função foi chamada:
function getArgs() {
  return arguments.length;
}

console.log(getArgs("Example")); // 1
console.log(getArgs("Another", "Example")); // 2
Embora o objeto arguments pareça agir como um array real, ele não possui métodos embutidos do Array como includes ou push. Para ter acesso a esses métodos, você precisaria primeiro converter o objeto arguments em um array real usando algo como slice, Array.from() ou o operador spread:
function hasCat() {
  return [...arguments].includes("cat");
}

console.log(hasCat("dog", "chicken", "cat")); // true
console.log(hasCat("dog", "chicken", "horse")); // false
Embora seja possível trabalhar com o objeto arguments para funções variádicas, aplicações modernas em JavaScript normalmente usarão a sintaxe de parâmetro rest. Você aprenderá mais sobre isso em uma lição futura.
Este módulo não possui perguntas. Marque como concluído.