You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dependiendo del uso o no del modo estricto "use strict", el resultado puede ser:
13
+
1.`undefined` (sin strict mode)
14
+
2.Un error (strict mode)
15
15
16
-
Why? Let's replay what's happening at line`(*)`:
16
+
¿Por qué? Repasemos qué ocurre en la línea`(*)`:
17
17
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.Cuando se accede a una propiedad de `str`, un "wrapper object" es creado.
19
+
2.Con modo estricto, alterarlo produce error.
20
+
3.De otra manera, la operación es llevada a cabo y el objeto obtiene la propiedad `test`, pero después de ello el "wrapper object" desaparece, entonces en la última linea `str` queda sin rastros de la propiedad.
21
21
22
-
So, on the last line, `str` has no trace of the property. A new wrapper object for every object operation on a string.
23
-
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.
25
-
26
-
**This example clearly shows that primitives are not objects.**
27
-
28
-
They just can not store data.
29
-
30
-
All property/method operations are performed with the help of temporary objects.
22
+
**Este ejemlplo claramente muestra que los tipos primitivos no son objetos.**
Copy file name to clipboardExpand all lines: 1-js/05-data-types/01-primitives-methods/article.md
+22-24Lines changed: 22 additions & 24 deletions
Original file line number
Diff line number
Diff line change
@@ -1,10 +1,8 @@
1
-
# Métodos de primitivos
1
+
# Métodos en datos primitivos
2
2
3
-
JavaScript nos permite trabajar con datos primitivos (strings, numbers, etc.) como si fueran objetos.
3
+
JavaScript nos permite trabajar con datos primitivos (strings, numbers, etc.) como si fueran objetos. Ellos también proveen métodos para ser llamados como tales. Los estudiaremos pronto, pero primero veamos cómo trabajan porque, por supuesto, los primitivos no son objetos (y aquí lo haremos más evidente).
4
4
5
-
También proveen, como aquellos, métodos para ser llamados. Los estudiaremos pronto, pero primero veamos cómo trabajan porque, por supuesto, los primitivos no son objetos (y aquí lo haremos más evidente).
6
-
7
-
Veamos las diferencias clave entre primitivos y objetos.
5
+
Veamos las principales diferencias entre primitivos y objetos.
8
6
9
7
Un primitivo
10
8
@@ -14,7 +12,7 @@ Un primitivo
14
12
Un objeto
15
13
16
14
- Es capaz de almacenar múltiples valores como propiedades.
17
-
- Puede ser creado con `{}`, por ejemplo: `{name: "John", age: 30}`. Hay otras clases de objetos en JavaScript; por ejemplo, las funciones (`function`) son objetos.
15
+
- Puede ser creado con `{}`, por ejemplo: `{name: "John", age: 30}`. Hay otros tipos de objetos en JavaScript; por ejemplo, las funciones son objetos.
18
16
19
17
Una de las mejores cosas de los objetos es que podemos almacenar una función como una de sus propiedades.
20
18
@@ -29,28 +27,28 @@ let john = {
29
27
john.sayHi(); // Hi buddy!
30
28
```
31
29
32
-
Aquí hemos hecho un función `john` con el método `sayHi`(saludar).
30
+
Aquí hemos hecho un función `john` con el método `sayHi`(saludar).
33
31
34
32
Ya existen muchos objetos incorporados, como aquellos que trabajan con fechas, errores, elementos HTML, etc. Ellos tienen diferentes propiedades y métodos.
35
33
36
34
¡Pero estas características vienen con un costo!
37
35
38
-
Los objetos son más "pesados" que los primitivos. Requieren recursos adicionales para soportar su maquinaria interna. Pero como las propiedades y los métodos son tan útiles en programación, los motores JavaScript tratan de optimizarlos para reducir su carga adiional.
36
+
Los objetos son más "pesados" que los tipos primitivos. Requieren recursos adicionales para soportar su maquinaria interna.
39
37
40
38
## Un primitivo como objeto
41
39
42
40
Aquí la paradoja que enfrentó el creador de JavaScript:
43
41
44
-
- Hay muchas cosas que uno quisiera hacer con primitivos como string o number. Sería grandioso acceder a métodos.
42
+
- Hay muchas cosas que uno quisiera hacer con primitivos como string o number. Sería grandioso accederlas como métodos.
45
43
- Los Primitivos deben ser tan rápidos y livianos como sea posible.
46
44
47
-
La solución se ve algo enrevesada, pero aquí está:
45
+
La solución es algo enrevesada, pero aquí está:
48
46
49
-
1. Los primitivos son aún primitivos. Con un valor único, como es deseable.
47
+
1. Los primitivos siguen siendo primitivos. Con un valor único, como es deseable.
50
48
2. El lenguaje permite acceder a métodos y propiedades de strings, numbers, booleans y symbols.
51
-
3.Cuando esto ocurre, un "object wrapper" (objeto envoltura) especial que provee la funcionalidad extra es creado y luego destruido.
49
+
3.Para que esto funcione, un "object wrapper" (objeto envoltura) especial que provee la funcionalidad extra es creado, y luego destruido.
52
50
53
-
Los "object wrappers" son diferentes para cada tipo primitivo y son llamados: `String`, `Number`, `Boolean` y `Symbol`. Así proveen diferentes sets de métodos.
51
+
Los "object wrappers" son diferentes para cada tipo primitivo y son llamados: `String`, `Number`, `Boolean` y `Symbol`. Así, proveen diferentes sets de métodos.
54
52
55
53
Por ejemplo, hay un método [str.toUpperCase()](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/toUpperCase) que devuelve un string en mayúsculas.
56
54
@@ -68,7 +66,7 @@ Simple, ¿no es así? Lo que realmente ocurre en `str.toUpperCase()`:
68
66
2. El método se ejecuta y devuelve un nuevo string (el mostrado con `alert`).
69
67
3. El objeto especial es destruido, dejando solo el primitivo `str`.
70
68
71
-
Así las primitivas pueden proveer métodos y aún permanecer livianas.
69
+
Así las primitivas pueden proporcionar métodos y aún permanecer livianas.
72
70
73
71
El motor JavaScript optimiza este proceso enormemente. Puede incluso saltear la creación del objeto extra por completo. Pero aún debe adherir a la especificación y comportarse como si creara uno.
Veremos más métodos específicos en los capítulos <info:number> y <info:string>.
84
82
85
83
86
-
````warn header="Constructors`String/Number/Boolean` son de uso interno solamente"
87
-
Algunos lenguajes como JAva permiten crear "wrapper objects" para primitivas explícitamente usando una sintaxis como `new Number(1)` o `new Boolean(false)`.
84
+
````warn header="Los class constructor `String/Number/Boolean` son de uso interno solamente"
85
+
Algunos lenguajes como Java nos permiten crear explícitamente "wrapper objects" para primitivas usando una sintaxis como `new Number(1)` o `new Boolean(false)`.
88
86
89
-
En JavaScript, eso también es posible por razones históricas, pero firmemente **no recomendado**. Las cosas enloquecerán en varios lugares.
87
+
En JavaScript, eso también es posible por razones históricas, pero firmemente **desaconsejado**. Las cosas enloquecerán en varios lugares.
Los objetos son siempre verdaderos en un if, por ello el alert se mostrará:
97
+
Los objetos son siempre verdaderos en un `if`, por ello el alert se mostrará:
100
98
101
99
```js run
102
100
let zero =newNumber(0);
103
101
104
102
if (zero) { // zero es true, porque es un objeto
105
-
alert( "zero es verdadero?!?" );
103
+
alert( "¡zero es verdadero!?" );
106
104
}
107
105
```
108
106
109
-
Por otro lado, usar las mismas funciones `String/Number/Boolean` sin `new` es totalmente sano y útil. Ellos convierten un valor al tipo correspondiente: a un string, number, o boolean (primitivo).
107
+
Por otro lado, usar las mismas funciones `String/Number/Boolean` sin `new` es totalmente sano y útil. Ellos convierten un valor al tipo correspondiente: a un string, un number o un boolean (primitivos).
110
108
111
109
Por ejemplo, esto es perfectamente válido:
112
110
```js
@@ -115,8 +113,8 @@ let num = Number("123"); // convierte string a number
115
113
````
116
114
117
115
118
-
````warn header="null/undefined have no methods"
119
-
Las primitivas especiales `null` y `undefined` son excepciones. No tienen "wrapper objects" correspondientes y no proveen métodos. En ese sentido son "lo más primitivo".
116
+
````warn header="null/undefined no tienen métodos"
117
+
Las primitivas especiales `null` y `undefined` son excepciones. No tienen los "wrapper objects" correspondientes y no proporcionan métodos. En ese sentido son "lo más primitivo".
120
118
121
119
El intento de acceder a una propiedad de tal valor daría error:
122
120
@@ -126,5 +124,5 @@ alert(null.test); // error
126
124
127
125
## Resumen
128
126
129
-
-Las primitivas excepto `null` y `undefined`proveen muchos métodos útiles. Los estudiaremos en los próximos capítulos.
130
-
-Formalmente, estos métodos trabajan a través de objetos temporales, pero los motores de JavaScript están bien afinados para optimizarlos internamente, así que llamarlos no es costoso.
127
+
-Los tipos primitivos excepto `null` y `undefined`proporcionan muchos métodos útiles. Los estudiaremos en los próximos capítulos.
128
+
-Oficialmente, estos métodos trabajan a través de objetos temporales, pero los motores de JavaScript están bien afinados para optimizar esto internamente así que llamarlos no es costoso.
0 commit comments