Skip to content

Commit 18f818f

Browse files
fernandoorsMaledong
authored andcommitted
PT-BR : Add file what-is-the-arguments-object.md (#2318)
The translation file 'what-is-the-arguments-object.md' was completed for PT-BR.
1 parent 80d54b4 commit 18f818f

1 file changed

Lines changed: 66 additions & 0 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
---
2+
date: '2011-08-26T10:08:50.000Z'
3+
tags:
4+
- truthy
5+
- falsy
6+
- types
7+
- coercion
8+
title: What is the arguments object?
9+
difficulty: 4
10+
layout: knowledge-post.hbs
11+
---
12+
13+
O objeto `arguments` é uma estrutura especial disponível dentro de todas as chamadas de função. É representada como uma lista de argumentos que são passados quando a função é chamada. Uma vez que o JavaScript permite chamar funções com indeterminado número indeterminado de argumentos, nós precisamos de um método para descobrir e acessar esses argumentos.
14+
15+
O objeto `arguments` é um array-like, seu tamanho corresponde a quantidade de argumentos passados para a função. É possível acessar estes valores através da indexação do Array. Exemplo: `arguments[0]` captura o primeiro argumento. A única outra propriedade de `arguments` é chamada `callee`, a qual o ES5 impede o uso no `strict mode`, mais informações podem ser encontradas [aqui](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee).
16+
Veja mais exemplos sobre as propriedades de `arguments`.
17+
18+
```js
19+
const myfunc = function(one) {
20+
arguments[0] === one;
21+
arguments[1] === 2;
22+
arguments.length === 3;
23+
}
24+
25+
myfunc(1, 2, 3);
26+
```
27+
28+
Essa construção é muito útil e fornece muitas funções ao JavaScript. Mas há uma pegadinha. O objeto `arguments` se comporta como um tipo array, porém ele não é realmente um array. Ele não têm as funcionalidades que o Array herda de Array.prototype e não responde a nenhum método de array, exemplo. `arguments.sort()` gera um TypeError. Em vez disso, você precisa copiar os valores para um array verdadeiro.
29+
Com o advento do ES6 o método `Array.from()` torna isso bastante simples.
30+
31+
```js
32+
const myfunc = function(a, b, c) {
33+
const args = Array.from(arguments);
34+
console.log(args) // [1, 2, 3]
35+
}
36+
37+
myfunc(1, 2, 3);
38+
```
39+
NOTA: Para ES5 e anteriores, um loop `for` normal pode fazer o truque
40+
41+
Em alguns casos você ainda pode tratar o `arguments` como um Array, você pode usar o `arguments` através de invocações de funções dinâmicas. E a maioria dos métodos nativos Array (Ex. Array.prototype.concat) aceitarão `arguments` quando invocados dinamicamente utilizando `call` ou `apply`. Essa técnica também oferece outros modos de conversão dos `arguments` para um tipo Array utilizando método `Array.slice`.
42+
43+
```js
44+
myfunc.apply(obj, arguments).
45+
46+
// concat arguments onto the
47+
Array.prototype.concat.apply([1,2,3], arguments);
48+
49+
// turn arguments into a true array
50+
const args = Array.prototype.slice.call(arguments);
51+
52+
// cut out first argument
53+
args = Array.prototype.slice.call(arguments, 1);
54+
```
55+
56+
### Objeto Argments em arrow function
57+
58+
As `arrow functions` foram adicionadas na especificação do ECMAScript 2015 (ES6), propondo uma alternativa mais compacta do que a declaração de uma função comum. A desvantagem dessa alternativa é que não existe mais o objecto `arguments` (e também as keywords `this`, `super` ou `new.target`). A solução para esses casos é o uso dos parâmetros `rest`. Os parâmetros `rest` permitem representar um número indeterminado de argumentos como um Array. Leia mais detalhes [aqui](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
59+
60+
```js
61+
const myfunc = (...args) => {
62+
console.log('first parameter is ', args[0]);
63+
}
64+
65+
myfunc(1, 2, 3);
66+
```

0 commit comments

Comments
 (0)