--- title: Arguments object slug: Web/JavaScript/Reference/Functions/arguments tags: - Funções - JavaScript - Referência(2) - argumentos translation_of: Web/JavaScript/Reference/Functions/arguments ---
O objeto arguments é como um objeto Array correspondendo aos argumentos passados para uma função.
arguments
O objeto arguments é uma variável local disponível dentro de todas as funções. Você pode referenciar os argumentos de uma função dentro da função usando o objeto arguments. Esse objeto contém um registro para cada argumento fornecido para a função, com o índice do primeiro registro começando em 0. Por exemplo, se são passados três argumentos para uma função, você pode referenciá-los como a seguir:
arguments[0] arguments[1] arguments[2]
Os argumentos também podem ser definidos:
arguments[1] = 'novo valor';
O objeto argumentos não é um {{jsxref("Array")}}. É similar a um Array, mas não possui as propriedades de Array, exceto length. Por exemplo, ele não possui o método pop. Entretanto, ele pode ser convertido em um Array real:
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);
// ES2015
var args = Array.from(arguments);
Usar slice nos argumentos impedem otimizações em alguns motores JavaScript (V8 por exemplo - mais informações). Se você precisar, tente construir um novo array iterando através dos argumentos do objeto. Uma alternativa seria usar o construtor do Array como uma função:
var args = (arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments));
Você pode usar o objeto arguments se você chamar uma função com mais argumentos do que ele é formalmente declarado para aceitar. Esta técnica é útil para funções que podem ser passada em um número de variáveis de argumentos. Você pode usar arguments.length para determinar o número de argumentos passado para a função, e então processar cada argumento usando o objeto arguments. Para determinar o número de parâmetros declarados na assinatura da função, use a propriedade Function.length.
O comando typeof arguments retorna 'object'.
console.log(typeof arguments); // 'object'
O typeof de argumentos individuais pode ser determinado com o uso do índice.
console.log(typeof arguments[0]); //this will return the typeof individual arguments.
Você também pode usar o método {{jsxref("Array.from()")}} ou o operador spread para converter argumentos em um Array real:
var args = Array.from(arguments);
var args = [...arguments];
arguments.calleearguments.caller {{ Obsolete_inline() }}arguments.lengtharguments[@@iterator]Este exemplo define uma função que concatena várias strings. O único argumento formal para a função é uma string que especifica os caracteres que separam os itens a concatenar. A função é definida como se segue:
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);
return args.join(separator);
}
Você pode passar qualquer número de argumentos para essa função e ela cria uma lista usando cada argumento como um item na lista.
// returns "red, orange, blue"
myConcat(", ", "red", "orange", "blue");
// returns "elephant; giraffe; lion; cheetah"
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// returns "sage. basil. oregano. pepper. parsley"
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
Este exemplo define uma função que cria uma string contatenado HTML para uma lista. O único argumento formal para a função é uma string que é "u" se a lista for desordenada (marcadores), ou "o" se a lista for ordenada (numerada). A função é definida como se segue:
function list(type) {
var result = "<" + type + "l><li>";
var args = Array.prototype.slice.call(arguments, 1);
result += args.join("</li><li>");
result += "</li></" + type + "l>"; // end list
return result;
}
Você pode passar qualquer número de argumentos para essa função, e ela adiciona cada argumento como um item para uma lista do tipo indicado. Por exemplo:
var listHTML = list("u", "One", "Two", "Three");
/* listHTML is:
"<ul><li>One</li><li>Two</li><li>Three</li></ul>"
*/
O objeto arguments pode ser usado em conjunto com os parâmetros rest, default e destruturados.
function foo(...args) {
return args;
}
foo(1, 2, 3); // [1,2,3]
Enquanto a presença dos parâmetros rest, default, ou desestruturados não alteram o comportamento do objeto arguments no código em strict mode, existe uma sutil diferença para o código non-strict.
Quando uma função não-strict não contém parâmetros rest, default, ou desestruturados, os valores no objeto arguments modificam os valores dos argumentos (e vice-versa). Veja o código:
function func(a) {
arguments[0] = 99; // updating arguments[0] also updates a
console.log(a);
}
func(10); // 99
e
function func(a) {
a = 99; // updating a also updates arguments[0]
console.log(arguments[0]);
}
func(10); // 99
Quando uma função não-strict contém parâmetros rest, default, ou desestruturados, os valores no objeto arguments não modificam os valores dos argumentos (e vice-versa). Ao invés disso, eles refletem os argumentos fornecidos no momento da chamada:
function func(a = 55) {
arguments[0] = 99; // updating arguments[0] does not also update a
console.log(a);
}
func(10); // 10
e
function func(a = 55) {
a = 99; // updating a does not also update arguments[0]
console.log(arguments[0]);
}
func(10); // 10
e
function func(a = 55) {
console.log(arguments[0]);
}
func(); // undefined
| Especificações | Status | Comentário |
|---|---|---|
| {{SpecName('ES1')}} | {{Spec2('ES1')}} | Definição inicial. Implementado em JavaScript 1.1 |
| {{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}} | {{Spec2('ES5.1')}} | |
| {{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}} | {{Spec2('ES6')}} |
{{CompatibilityTable}}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} |