Skip to content

Commit 48a6cd4

Browse files
Merge pull request #3 from DouglasMV/master
Methods of primitives
2 parents a1a635e + 124b6ce commit 48a6cd4

File tree

3 files changed

+74
-74
lines changed

3 files changed

+74
-74
lines changed
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11

2-
Try running it:
2+
Tente executá-lo:
33

44
```js run
5-
let str = "Hello";
5+
let str = "Olá";
66

77
str.test = 5; // (*)
88

99
alert(str.test);
1010
```
1111

12-
There may be two kinds of result:
12+
Pode haver dois tipos de resultado:
1313
1. `undefined`
14-
2. An error.
14+
2. Um erro.
1515

16-
Why? Let's replay what's happening at line `(*)`:
16+
Por quê? Vamos examinar o que está acontecendo na linha`(*)`:
1717

18-
1. When a property of `str` is accessed, a "wrapper object" is created.
19-
2. The operation with the property is carried out on it. So, the object gets the `test` property.
20-
3. The operation finishes and the "wrapper object" disappears.
18+
1. Quando a propriedade de `str` é acessada, um "invólucro de objeto" é criado.
19+
2. A operação com a propriedade é realizada nela. Então, o objeto obtém a propriedade `test`.
20+
3. A operação é concluída e o "invólucro de objeto" desaparece.
2121

22-
So, on the last line, `str` has no trace of the property. A new wrapper object for every object operation on a string.
22+
Então, na última linha, `str` não tem nenhum traço da propriedade. Um novo invólucro de objeto para cada operação de objeto em uma string.
2323

24-
Some browsers though may decide to further limit the programmer and disallow to assign properties to primitives at all. That's why in practice we can also see errors at line `(*)`. It's a little bit farther from the specification though.
24+
Alguns navegadores podem decidir limitar ainda mais o programador e não permitir a atribuição de propriedades aos primitivos. É por isso que na prática também podemos ver erros na linha `(*)`. Porém é um pouco fora do escopo da especificação.
2525

26-
**This example clearly shows that primitives are not objects.**
26+
**Este exemplo mostra claramente que os primitivos não são objetos.**
2727

28-
They just can not store data.
28+
Eles simplesmente não podem armazenar dados.
2929

30-
All property/method operations are performed with the help of temporary objects.
30+
Todas as operações de propriedade/método são executadas com a ajuda de objetos temporários.
3131

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
importance: 5
1+
importância: 5
22

33
---
44

5-
# Can I add a string property?
5+
# Posso adicionar uma propriedade à uma string?
66

77

88
Consider the following code:
99

1010
```js
11-
let str = "Hello";
11+
let str = "Olá";
1212

1313
str.test = 5;
1414

1515
alert(str.test);
1616
```
1717

18-
How do you think, will it work? What will be shown?
18+
Como você acha, vai funcionar? O que será mostrado?
Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,130 +1,130 @@
1-
# Methods of primitives
1+
# Métodos de primitivos
22

3-
JavaScript allows us to work with primitives (strings, numbers, etc.) as if they were objects.
3+
JavaScript nos permite trabalhar com primitivos (strings, números, etc.) como se fossem objetos.
44

5-
They also provide methods to call as such. We will study those soon, but first we'll see how it works because, of course, primitives are not objects (and here we will make it even clearer).
5+
Eles também fornecem métodos para chamar como se fossem objetos. Estudaremos isso em breve, mas primeiro veremos como isso funciona, porque, é claro, os primitivos não são objetos (e aqui deixaremos isso ainda mais claro).
66

7-
Let's look at the key distinctions between primitives and objects.
7+
Vejamos as principais diferenças entre primitivos e objetos.
88

9-
A primitive
9+
Um primitivo
1010

11-
- Is a value of a primitive type.
12-
- There are 6 primitive types: `string`, `number`, `boolean`, `symbol`, `null` and `undefined`.
11+
- É um valor de um tipo primitivo.
12+
- Existem 6 tipos primitivos: `string`, `number`, `boolean`, `symbol`, `null` e `undefined`.
1313

14-
An object
14+
Um objeto
1515

16-
- Is capable of storing multiple values as properties.
17-
- Can be created with `{}`, for instance: `{name: "John", age: 30}`. There are other kinds of objects in JavaScript; functions, for example, are objects.
16+
- É capaz de armazenar vários valores como propriedades.
17+
- Pode ser criado com `{}`, por exemplo: `{name: "John", age: 30}`. Existem outros tipos de objetos em JavaScript; funções, por exemplo, são objetos.
1818

19-
One of the best things about objects is that we can store a function as one of its properties.
19+
Uma das melhores coisas sobre objetos é que podemos armazenar uma função como uma de suas propriedades.
2020

2121
```js run
2222
let john = {
2323
name: "John",
2424
sayHi: function() {
25-
alert("Hi buddy!");
25+
alert("Oi amigo!");
2626
}
2727
};
2828

29-
john.sayHi(); // Hi buddy!
29+
john.sayHi(); // Oi amigo!
3030
```
3131

32-
So here we've made an object `john` with the method `sayHi`.
32+
Então aqui nós fizemos um objeto `john` com o método `sayHi`.
3333

34-
Many built-in objects already exist, such as those that work with dates, errors, HTML elements, etc. They have different properties and methods.
34+
Muitos objetos internos já existem, como aqueles que trabalham com datas, erros, elementos HTML, etc. Eles possuem diferentes propriedades e métodos.
3535

36-
But, these features come with a cost!
36+
Mas esses recursos vêm com um custo!
3737

38-
Objects are "heavier" than primitives. They require additional resources to support the internal machinery. But as properties and methods are very useful in programming, JavaScript engines try to optimize them to reduce the additional burden.
38+
Objetos são "mais pesados" que primitivos. Eles exigem recursos adicionais para suportar o maquinário interno. Mas, como as propriedades e os métodos são muito úteis na programação, os mecanismos de JavaScript tentam otimizá-los para reduzir a carga adicional.
3939

40-
## A primitive as an object
40+
## Um primitivo como objeto
4141

42-
Here's the paradox faced by the creator of JavaScript:
42+
Aqui está o paradoxo enfrentado pelo criador do JavaScript:
4343

44-
- There are many things one would want to do with a primitive like a string or a number. It would be great to access them as methods.
45-
- Primitives must be as fast and lightweight as possible.
44+
- Há muitas coisas que alguém poderia querer fazer com um primitivo como uma string ou um número. Seria ótimo acessá-los como métodos.
45+
- Primitivos devem ser o mais rápido e leve possível.
4646

47-
The solution looks a little bit awkward, but here it is:
47+
A solução parece um pouco estranha, mas aqui está:
4848

49-
1. Primitives are still primitive. A single value, as desired.
50-
2. The language allows access to methods and properties of strings, numbers, booleans and symbols.
51-
3. When this happens, a special "object wrapper" that provides the extra functionality is created, and then is destroyed.
49+
1. Primitivos ainda são primitivos. Um único valor, conforme desejado.
50+
2. A linguagem permite acesso a métodos e propriedades de strings, números, booleanos e símbolos.
51+
3. Quando isso acontece, um "invólucro de objeto" especial que fornece a funcionalidade extra é criado e, em seguida, é destruído.
5252

53-
The "object wrappers" are different for each primitive type and are called: `String`, `Number`, `Boolean` and `Symbol`. Thus, they provide different sets of methods.
53+
Os "invólucros de objeto" são diferentes para cada tipo primitivo e são chamados: `String`, `Number`, `Boolean` e `Symbol`. Assim, eles fornecem diferentes conjuntos de métodos.
5454

55-
For instance, there exists a method [str.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) that returns a capitalized string.
55+
Por exemplo, existe um método [str.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) que retorna uma string em letras maiúsculas.
5656

57-
Here's how it works:
57+
Veja como isso funciona:
5858

5959
```js run
60-
let str = "Hello";
60+
let str = "Olá";
6161

62-
alert( str.toUpperCase() ); // HELLO
62+
alert( str.toUpperCase() ); // OLÁ
6363
```
6464

65-
Simple, right? Here's what actually happens in `str.toUpperCase()`:
65+
Simples, certo? Aqui está o que realmente acontece em`str.toUpperCase()`:
6666

67-
1. The string `str` is a primitive. So in the moment of accessing its property, a special object is created that knows the value of the string, and has useful methods, like `toUpperCase()`.
68-
2. That method runs and returns a new string (shown by `alert`).
69-
3. The special object is destroyed, leaving the primitive `str` alone.
67+
1. A string `str` é um primitivo. Assim, no momento de acessar sua propriedade, é criado um objeto especial que conhece o valor da string e possui métodos úteis, como `toUpperCase ()`.
68+
2. Esse método é executado e retorna uma nova string (mostrada por `alert`).
69+
3. O objeto especial é destruído, deixando o primitivo `str` sozinho.
7070

71-
So primitives can provide methods, but they still remain lightweight.
71+
Portanto, os primitivos podem fornecer métodos, mas ainda permanecem leves.
7272

73-
The JavaScript engine highly optimizes this process. It may even skip the creation of the extra object at all. But it must still adhere to the specification and behave as if it creates one.
73+
O mecanismo do JavaScript otimiza muito esse processo. Pode até ignorar a criação do objeto extra. Mas ainda deve seguir a especificação e se comportar como se criasse um.
7474

75-
A number has methods of its own, for instance, [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) rounds the number to the given precision:
75+
Um número tem métodos próprios, por exemplo, [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) arredonda o número para a precisão dada:
7676

7777
```js run
7878
let n = 1.23456;
7979

8080
alert( n.toFixed(2) ); // 1.23
8181
```
8282

83-
We'll see more specific methods in chapters <info:number> and <info:string>.
83+
Vamos ver métodos mais específicos nos capítulos <info:number> e <info:string>.
8484

8585

86-
````warn header="Constructors `String/Number/Boolean` are for internal use only"
87-
Some languages like Java allow us to create "wrapper objects" for primitives explicitly using a syntax like `new Number(1)` or `new Boolean(false)`.
86+
````warn header="Construtores `String/Number/Boolean` são apenas para uso interno"
87+
Algumas linguagens como Java nos permitem criar "objetos invólucros" para primitivos explicitamente usando uma sintaxe como `new Number(1)` ou `new Boolean(false)`.
8888

89-
In JavaScript, that's also possible for historical reasons, but highly **unrecommended**. Things will go crazy in several places.
89+
Em JavaScript, isso também é possível por razões históricas, mas é altamente **não recomendado**. As coisas vão enlouquecer em vários lugares.
9090

91-
For instance:
91+
Por exemplo:
9292

9393
```js run
94-
alert( typeof 1 ); // "number"
94+
alert( typeof 1 ); // "número"
9595

96-
alert( typeof new Number(1) ); // "object"!
96+
alert( typeof new Number(1) ); // "objeto"!
9797
```
9898

99-
And because what follows, `zero`, is an object, the alert will show up:
99+
E por isso a seguir, `zero`, é um objeto, o alerta será mostrado:
100100

101101
```js run
102102
let zero = new Number(0);
103103

104-
if (zero) { // zero is true, because it's an object
105-
alert( "zero is truthy?!?" );
104+
if (zero) { // zero é true (verdadeiro), por que é um objeto
105+
alert( "zero é verdadeiro?!?" );
106106
}
107107
```
108108

109-
On the other hand, using the same functions `String/Number/Boolean` without `new` is a totally sane and useful thing. They convert a value to the corresponding type: to a string, a number, or a boolean (primitive).
109+
Por outro lado, usar as mesmas funções `String / Number / Boolean` sem` new` é uma coisa totalmente sensata e útil. Eles convertem um valor para o tipo correspondente: para uma string, um número ou um booleano (primitivo).
110110

111-
For example, this is entirely valid:
111+
Por exemplo, isso é inteiramente válido:
112112
```js
113-
let num = Number("123"); // convert a string to number
113+
let num = Number("123"); // converte a string para número
114114
```
115115
````
116116
117117
118-
````warn header="null/undefined have no methods"
119-
The special primitives `null` and `undefined` are exceptions. They have no corresponding "wrapper objects" and provide no methods. In a sense, they are "the most primitive".
118+
````warn header="null/undefined não tem métodos"
119+
Os primitivos especiais `null` e` undefined` são exceções. Eles não têm "invólucros de objeto" correspondentes e não fornecem métodos. De certo modo, eles são "os mais primitivos".
120120
121-
An attempt to access a property of such value would give the error:
121+
Uma tentativa de acessar uma propriedade de um valor desses resultaria no erro:
122122
123123
```js run
124-
alert(null.test); // error
124+
alert(null.test); // erro
125125
````
126126

127-
## Summary
127+
## Resumo
128128

129-
- Primitives except `null` and `undefined` provide many helpful methods. We will study those in the upcoming chapters.
130-
- Formally, these methods work via temporary objects, but JavaScript engines are well tuned to optimize that internally, so they are not expensive to call.
129+
- Primitivos, exceto `null` e` undefined`, fornecem muitos métodos úteis. Estudaremos eles nos próximos capítulos.
130+
- Formalmente, esses métodos funcionam por meio de objetos temporários, mas os mecanismos de JavaScript são bem ajustados para otimizar isso internamente, para que não sejam caros para serem chamados.

0 commit comments

Comments
 (0)