Skip to content

Commit 5236768

Browse files
authored
Update article.md
En el glosario se estipuló key = clave. Así lo dejo y dejaré en próximas traducciones.
1 parent d95aaa5 commit 5236768

File tree

1 file changed

+32
-32
lines changed

1 file changed

+32
-32
lines changed

1-js/04-object-basics/08-symbol/article.md

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# Tipo Symbol
33

4-
Por especificación, las claves de un objeto deben ser solamente del tipo String o Symbol. Solamente esos dos: String o Symbol.
4+
Por especificación, las claves (Keys) de un objeto deben ser solamente del tipo String o Symbol. Solamente esos dos: String o Symbol.
55

66
Hasta ahora sólo hemos aprendido acerca de los Strings, por lo que es momento de conocer las ventajas que Symbol nos puede dar.
77

@@ -46,7 +46,7 @@ Por ejemplo, este `alert` mostrará un error:
4646
```js run
4747
let id = Symbol("id");
4848
*!*
49-
alert(id); // TypeError: Cannot convert a Symbol value to a string
49+
alert(id); // TypeError: No puedes convertir un valor Symbol en string
5050
*/!*
5151
```
5252
@@ -70,11 +70,11 @@ alert(id.description); // id
7070
7171
````
7272

73-
## Propiedades "Ocultas"
73+
## Claves "Ocultas"
7474

75-
Los Symbols nos permiten crear propiedades "ocultas" en un objeto, a las cuales ninguna otra parte del código puede accesar ni sobrescribir.
75+
Los Symbols nos permiten crear claves "ocultas" en un objeto, a las cuales ninguna otra parte del código puede accesar ni sobrescribir.
7676

77-
Por ejemplo, si queremos guardar un "identificador" para el objeto `user`, podemos asignar un symbol como propiedad del objeto:
77+
Por ejemplo, si queremos guardar un "identificador" para el objeto `user`, podemos asignar un symbol como clave del objeto:
7878

7979
```js run
8080
let user = { // pertenece a otro código
@@ -85,22 +85,22 @@ let id = Symbol("id");
8585

8686
user[id] = 1;
8787

88-
alert( user[id] ); // podemos accesar a la información utilizando el symbol como nombre de propiedad
88+
alert( user[id] ); // podemos accesar a la información utilizando el symbol como nombre de clave
8989
```
9090

9191
¿Cuál es la ventaja de usar `Symbol("id")` y no un string `"id"`?
9292

9393
Vamos a profundizar en el ejemplo para que sea más claro.
9494

95-
Imagina que otro script quiere tener la propiedad "id" dentro de `user` para sus propios fines. Puede ser otra librería de JavaScript, por lo cual ninguno de los scripts saben de su coexistencia.
95+
Imagina que otro script quiere tener la clave "id" dentro de `user` para sus propios fines. Puede ser otra librería de JavaScript, por lo cual ninguno de los scripts saben de su coexistencia.
9696

9797
Y entonces ese script puede crear su propio `Symbol("id")`, como este:
9898

9999
```js
100100
// ...
101101
let id = Symbol("id");
102102

103-
user[id] = "Their id value";
103+
user[id] = "Su id";
104104
```
105105

106106
No habrá conflicto porque los Symbols siempre son diferentes, incluso si tienen el mismo nombre.
@@ -110,12 +110,12 @@ Ahora ten en cuenta que si utilizamos un string `"id"` en lugar de un Symbol par
110110
```js run
111111
let user = { name: "John" };
112112

113-
// Nuestro script usa la propiedad "id"
114-
user.id = "Our id value";
113+
// Nuestro script usa la clave "id"
114+
user.id = "Nuestro valor id";
115115

116116
// ...Otro script también quiere usar "id" ...
117117

118-
user.id = "Their id value"
118+
user.id = "Su valor de id"
119119
// Boom! sobreescrito para otro script!
120120
```
121121

@@ -139,7 +139,7 @@ Se hace así porque necesitamos que el valor de la variable `id` sea la clave, n
139139

140140
### Los Symbols son omitidos en for..in
141141

142-
Las propiedades de Symbol no participan dentro de los ciclos `for..in`.
142+
Las claves de Symbol no participan dentro de los ciclos `for..in`.
143143

144144
Por ejemplo:
145145

@@ -152,16 +152,16 @@ let user = {
152152
};
153153

154154
*!*
155-
for (let key in user) alert(key); // name, age (no symbols)
155+
for (let key in user) alert(key); // nombre, edad (no symbols)
156156
*/!*
157157

158-
// el acceso directo a la propiedad de symbol funciona
158+
// el acceso directo a la clave de symbol funciona
159159
alert( "Direct: " + user[id] );
160160
```
161161

162-
Esto forma parte del concepto general de "ocultamiento". Si otro script o si otra librería itera el objeto este no accesará a la propiedad de Symbol.
162+
Esto forma parte del concepto general de "ocultamiento". Si otro script o si otra librería itera el objeto este no accesará a la clave de Symbol.
163163

164-
En contraste, [Object.assign](mdn:js/Object/assign) copia las propiedades tanto del string como las del symbol:
164+
En contraste, [Object.assign](mdn:js/Object/assign) copia las claves tanto del string como las del symbol:
165165

166166
```js run
167167
let id = Symbol("id");
@@ -174,15 +174,15 @@ let clone = Object.assign({}, user);
174174
alert( clone[id] ); // 123
175175
```
176176

177-
No hay paradoja aquí, es así por diseño. La idea es que cuando clonamos un objeto o cuando fusionamos objetos, generalmente queremos que se copien *todas* las propiedades (incluidos los Symbol como `id`).
177+
No hay paradoja aquí, es así por diseño. La idea es que cuando clonamos un objeto o cuando fusionamos objetos, generalmente queremos que se copien *todas* las claves (incluidos los Symbol como `id`).
178178

179179
## Symbols Globales
180180

181181
Como hemos visto, normalmente todos los Symbols son diferentes aunque tengan el mismo nombre. Pero algunas veces necesitamos que los symbol con el mismo nombre sean las mismas entidades.
182182

183-
Por ejemplo, distintas partes de nuestra aplicación quieren accesar a symbol `"id"` queriendo obtener el mismo valor de la propiedad.
183+
Por ejemplo, distintas partes de nuestra aplicación quieren accesar a symbol `"id"` queriendo obtener el mismo valor de la clave.
184184

185-
Para lograr esto, existe un *global symbol registry*. Ahí podemos crear symbols y acceder después a ellos, lo cual nos garantiza que cada vez que se acceda a la propiedad con el mismo nombre, esta te devuelva exactamente el mismo symbol.
185+
Para lograr esto, existe un *global symbol registry*. Ahí podemos crear symbols y acceder después a ellos, lo cual nos garantiza que cada vez que se acceda a la clave con el mismo nombre, esta te devuelva exactamente el mismo symbol.
186186

187187
Para crear u accesar a un symbol en el registro global, usa `Symbol.for(key)`.
188188

@@ -216,29 +216,29 @@ Para los global symbols, no solo `Symbol.for(key)` devuelve un symbol por su nom
216216
Por ejemplo:
217217

218218
```js run
219-
// tomar symbol por name
220-
let sym = Symbol.for("name");
219+
// tomar symbol por nombre
220+
let sym = Symbol.for("nombre");
221221
let sym2 = Symbol.for("id");
222222

223223
// tomar name por symbol
224-
alert( Symbol.keyFor(sym) ); // name
224+
alert( Symbol.keyFor(sym) ); // nombre
225225
alert( Symbol.keyFor(sym2) ); // id
226226
```
227227

228-
El `Symbol.keyFor` utiliza internamente el registro "global symbol registry" para buscar la propiedad del symbol, por lo tanto, no funciona para los symbol que no están dentro del registro. Si el symbol no es global, no será capaz de encontrarlo y por lo tanto devolverá `undefined`.
228+
El `Symbol.keyFor` utiliza internamente el registro "global symbol registry" para buscar la clave del symbol, por lo tanto, no funciona para los symbol que no están dentro del registro. Si el symbol no es global, no será capaz de encontrarlo y por lo tanto devolverá `undefined`.
229229

230-
Dicho esto, todo symbol tiene `description` de propiedad.
230+
Dicho esto, todo symbol tiene `description` de clave.
231231

232232
Por ejemplo:
233233

234234
```js run
235-
let globalSymbol = Symbol.for("name");
236-
let localSymbol = Symbol("name");
235+
let globalSymbol = Symbol.for("nombre");
236+
let localSymbol = Symbol("nombre");
237237

238-
alert( Symbol.keyFor(globalSymbol) ); // name, global symbol
238+
alert( Symbol.keyFor(globalSymbol) ); // nombre, global symbol
239239
alert( Symbol.keyFor(localSymbol) ); // undefined, no global
240240

241-
alert( localSymbol.description ); // name
241+
alert( localSymbol.description ); // nombre
242242
```
243243

244244
## System symbols
@@ -267,11 +267,11 @@ Symbols son siempre valores distintos aunque tengan el mismo nombre. Si queremos
267267

268268
Symbols se utilizan principalmente en dos casos:
269269

270-
1. Propiedades "Ocultas" dentro de un objeto.
271-
Si queremos agregar una propiedad a un objeto que "pertenezca" a otro script u otra librería, podemos crear un symbol y usarlo como propiedad. Una propiedad de symbol no aparecerá en los ciclos `for..in`,por lo que no aparecerá listada. Tampoco podrá ser accesada directamente por otro script porque este no tendrá nuestro symbol y no podrá intervenir en sus acciones.
270+
1. Claves(keys) "Ocultas" dentro de un objeto.
271+
Si queremos agregar una clave a un objeto que "pertenezca" a otro script u otra librería, podemos crear un symbol y usarlo como clave. Una clave de symbol no aparecerá en los ciclos `for..in`,por lo que no aparecerá listada. Tampoco podrá ser accesada directamente por otro script porque este no tendrá nuestro symbol y no podrá intervenir en sus acciones.
272272

273-
Podemos "ocultar" ciertos valores dentro de un objeto que solo estarán disponibles dentro de ese script usando las propiedades de symbol.
273+
Podemos "ocultar" ciertos valores dentro de un objeto que solo estarán disponibles dentro de ese script usando las claves de symbol.
274274

275275
2. Existen diversos symbols del sistema que utiliza Javascript, a los cuales podemos accesar por medio de `Symbol.*`. Podemos usarlos para alterar algunos comportamientos. Por ejemplo, más adelante en el tutorial, usaremos `Symbol.iterator` para [iterables](info:iterable), `Symbol.toPrimitive` para configurar [object-to-primitive conversion](info:object-toprimitive).
276276

277-
Técnicamente, los symbols no están 100% ocultos. Existe un método incorporado [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) que nos permite obtener todos los symbols. También existe un método llamado [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) que devuelve *todas* las propiedades de un objeto, incluyendo las que son de tipo symbol. Por lo tanto, no están realmente ocultos, aunque la mayoría de las librerías, los métodos incorporados y las construcciones de sintaxis se adhieren a un acuerdo común de que sí lo están. Y el que explícitamente llama a los métodos antes mencionados probablemente entiende bien lo que está haciendo.
277+
Técnicamente, los symbols no están 100% ocultos. Existe un método incorporado [Object.getOwnPropertySymbols(obj)](mdn:js/Object/getOwnPropertySymbols) que nos permite obtener todos los symbols. También existe un método llamado [Reflect.ownKeys(obj)](mdn:js/Reflect/ownKeys) que devuelve *todas* las claves de un objeto, incluyendo las que son de tipo symbol. Por lo tanto, no están realmente ocultos, aunque la mayoría de las librerías, los métodos incorporados y las construcciones de sintaxis se adhieren a un acuerdo común de que sí lo están. Y el que explícitamente llama a los métodos antes mencionados probablemente entiende bien lo que está haciendo.

0 commit comments

Comments
 (0)