Skip to content

Commit a43cbd8

Browse files
committed
Merge enstream 241104
2 parents 483ebeb + 34a80e7 commit a43cbd8

File tree

45 files changed

+1988
-202
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+1988
-202
lines changed

Diff for: .github/FUNDING.yml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
github: iliakan

Diff for: 1-js/02-first-steps/04-variables/article.md

+19-19
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Variables
22

3-
La mayoría del tiempo, una aplicación de JavaScript necesita trabajar con información. Aquí hay 2 ejemplos:
3+
La mayor parte del tiempo, una aplicación JavaScript necesita trabajar con información. Dos ejemplos:
44
1. Una tienda en línea -- La información puede incluir los bienes a la venta y un "carrito de compras".
55
2. Una aplicación de chat -- La información puede incluir los usuarios, mensajes, y mucho más.
66

@@ -18,7 +18,7 @@ La siguiente declaración genera (en otras palabras: *declara* o *define*) una v
1818
let message;
1919
```
2020

21-
Ahora podemos introducir datos en ella al utilizar el operador de asignación `=`:
21+
Ahora podemos introducir datos en ella, utilizando el operador de asignación `=`:
2222

2323
```js
2424
let message;
@@ -47,7 +47,7 @@ let message = 'Hola!'; // define la variable y asigna un valor
4747
alert(message); // Hola!
4848
```
4949

50-
También podemos declarar variables múltiples en una sola línea:
50+
También podemos declarar múltiples variables en una sola línea:
5151

5252
```js no-beautify
5353
let user = 'John', age = 25, message = 'Hola';
@@ -63,15 +63,15 @@ let age = 25;
6363
let message = 'Hola';
6464
```
6565

66-
Algunas personas también definen variables múltiples en estilo multilínea:
66+
Hay quienes prefieren definir múltiples variables en estilo multilínea:
6767

6868
```js no-beautify
6969
let user = 'John',
7070
age = 25,
7171
message = 'Hola';
7272
```
7373

74-
...Incluso en este estilo "coma primero":
74+
... o con el estilo "coma primero":
7575

7676
```js no-beautify
7777
let user = 'John'
@@ -97,7 +97,7 @@ Existen sutiles diferencias entre `let` y `var`, pero no nos interesan en este m
9797
9898
Podemos comprender fácilmente el concepto de una "variable" si nos la imaginamos como una "caja" con una etiqueta de nombre único pegada en ella.
9999
100-
Por ejemplo, podemos imaginar la variable `message` como una caja etiquetada `"message"` con el valor `"Hola!"` adentro:
100+
Por ejemplo, la variable `message` puede ser imaginada como una caja etiquetada `"message"` con el valor `"Hola!"` dentro:
101101
102102
![](variable.svg)
103103
@@ -205,7 +205,7 @@ let имя = '...';
205205
let 我 = '...';
206206
```
207207
208-
Técnicamente, no existe ningún error aquí. Tales nombres están permitidos, pero existe una tradición internacional de utilizar inglés en el nombramiento de variables. Incluso si estamos escribiendo un script pequeño, este puede tener una larga vida por delante. Puede ser necesario que gente de otros países deba leerlo en algún momento.
208+
Técnicamente, no existe error aquí. Tales nombres están permitidos, pero internacionalmente existe la convención de utilizar el inglés en el nombramiento de variables. Incluso si estamos escribiendo un script pequeño, este puede tener una larga vida por delante. Gente de otros países pueden necesitar leerlo en algún momento.
209209
````
210210

211211
````warn header="Nombres reservados"
@@ -260,7 +260,7 @@ const myBirthday = '18.04.1982';
260260
myBirthday = '01.01.2001'; // ¡error, no se puede reasignar la constante!
261261
```
262262
263-
Cuando un programador está seguro de que una variable nunca cambiará, puede declarar la variable con `const` para garantizar y comunicar claramente este hecho a todos.
263+
Cuando un programador está seguro de que una variable nunca cambiará, puede declararla con `const` para garantizar esto y comunicarlo claramente a los demás.
264264
265265
### Constantes mayúsculas
266266
@@ -297,9 +297,9 @@ Por ejemplo:
297297
const pageLoadTime = /* el tiempo que tardó la página web para cargar */;
298298
```
299299
300-
El valor de `pageLoadTime` no se conoce antes de cargar la página, así que la nombramos normalmente. No obstante, es una constante porque no cambia después de su asignación inicial.
300+
El valor de `pageLoadTime` no está preestablecido. Como no se conoce antes de cargar la página, la nombramos normalmente. Pero podemos declararla como constante, porque después de su asignación inicial, no cambiará.
301301
302-
En otras palabras, las constantes con nombres en mayúscula son utilizadas solamente como alias para valores invariables y preestablecidos ("hard-coded").
302+
En otras palabras, las constantes en mayúsculas son utilizadas solamente como alias para valores invariables y preestablecidos (o "hard-coded").
303303
304304
## Nombrar cosas correctamente
305305
@@ -309,16 +309,16 @@ Una variable debe tener un nombre claro, de significado evidente, que describa e
309309
310310
Nombrar variables es una de las habilidades más importantes y complejas en la programación. Un vistazo rápido a el nombre de las variables nos revela cuál código fue escrito por un principiante o por un desarrollador experimentado.
311311
312-
En un proyecto real, la mayor parte de el tiempo se pasa modificando y extendiendo una base de código en vez de empezar a escribir algo desde cero. Cuando regresamos a algún código después de hacer algo distinto por un rato, es mucho más fácil encontrar información que está bien etiquetada. O, en otras palabras, cuando las variables tienen nombres adecuados.
312+
En un proyecto real, se pasa mucho más tiempo modificando y extendiendo una base de código existente que escribiendo algo nuevo desde cero. Cuando regresamos a nuestro código luego de un tiempo, es mucho más fácil encontrar información que está bien etiquetada. O en otras palabras, cuando las variables tienen los nombres adecuados.
313313
314-
Por favor pasa tiempo pensando en el nombre adecuado para una variable antes de declararla. Hacer esto te da un retorno muy sustancial.
314+
Por favor, dedica tiempo para pensar un nombre correcto para una variable antes de declararla. Hacer esto te rendirá muy bien.
315315
316316
Algunas reglas buenas para seguir:
317317
318-
- Use términos legibles para humanos como `userName` p `shoppingCart`.
319-
- Evite abreviaciones o nombres cortos `a`, `b`, `c`, al menos que en serio sepa lo que está haciendo.
320-
- Cree nombres que describen al máximo lo que son y sean concisos. Ejemplos que no son adecuados son `data` y `value`. Estos nombres no nos dicen nada. Estos solo está bien usarlos en el contexto de un código que deje excepcionalmente obvio cuál valor o cuales datos está referenciando la variable.
321-
- Acuerda en tu propia mente y con tu equipo cuáles términos se utilizarán. Si a un visitante se le llamara "user", debemos llamar las variables relacionadas `currentUser` o `newUser` en vez de `currentVisitor` o `newManInTown`.
318+
- Usa términos legibles para humanos como `userName` p `shoppingCart`.
319+
- Evita abreviaciones o nombres cortos `a`, `b`, `c`, a menos que realmente sepas lo que estás haciendo.
320+
- Crea nombres que describan al máximo lo que son y sean concisos. Ejemplos de nombres malos son `data` y `value`. Estos nombres no nos dicen nada, solo son adecuados en el contexto de un código que deje excepcionalmente obvio cuál dato o valor está referenciando la variable.
321+
- Ponte de acuerdo con tu equipo, y con tu propia mente, cuáles términos se utilizarán. Si a un visitante se lo llamara "user", debemos llamar las variables relacionadas `currentUser` o `newUser` en vez de `currentVisitor` o `newManInTown`.
322322
323323
¿Suena simple? De hecho lo es, pero no es tan fácil crear nombres de variables descriptivos y concisos a la hora de practicar. Inténtelo.
324324
@@ -329,9 +329,9 @@ El resultado de esto es que sus variables son como cajas en las cuales la gente
329329
330330
Dichos programadores se ahorran un poco durante la declaración de la variable, pero pierden diez veces más a la hora de depuración.
331331
332-
Una variable extra es algo bueno, no algo malvado.
332+
Una variable extra es algo bueno, no algo diabólico.
333333
334-
Los minificadores de JavaScript moderno, y los navegadores optimizan el código suficientemente bien para no generar cuestiones de rendimiento. Utilizar diferentes variables para distintos valores incluso puede ayudar a optimizar su código
334+
Los navegadores modernos y los minificadores de JavaScript optimizan el código, así que esto no impacta en el rendimiento. Utilizar diferentes variables para distintos valores incluso puede ayudar a optimizar tu código.
335335
```
336336
337337
## Resumen
@@ -340,6 +340,6 @@ Podemos declarar variables para almacenar datos al utilizar las palabra clave `v
340340
341341
- `let` -- es la forma moderna de declaración de una variable.
342342
- `var` -- es la declaración de variable de vieja escuela. Normalmente no lo utilizamos en absoluto. Cubriremos sus sutiles diferencias con `let` en el capítulo <info:var>, por si lo necesitaras.
343-
- `const` -- es como `let`, pero el valor de la variable no puede ser alterado.
343+
- `const` -- es como `let`, pero una vez asignado, el valor de la variable no podrá alterarse.
344344
345345
Las variables deben ser nombradas de tal manera que entendamos fácilmente lo que está en su interior.

Diff for: 1-js/03-code-quality/06-polyfills/article.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Los equipos de desarrollo detrás de los intérpretes (engines) de JavaScript ti
77

88
Por lo tanto, es bastante común para un intérprete implementar solo parte del estándar.
99

10-
Una buena página para ver el estado actual de soporte de características del lenguaje es <https://kangax.github.io/compat-table/es6/> (es grande, todavía tenemos mucho que aprender).
10+
Una buena página para ver el estado actual de soporte de características del lenguaje es <https://compat-table.github.io/compat-table/es6/> (es grande, todavía tenemos mucho que aprender).
1111

1212
Como programadores, queremos las características más recientes. Cuanto más, ¡mejor!
1313

@@ -72,7 +72,8 @@ if (!Math.trunc) { // no existe tal función
7272
JavaScript es un lenguaje muy dinámico, los scripts pueden agregar o modificar cualquier función, incluso las integradas.
7373
7474
Una librería interesante de polyfills es:
75-
- [core js](https://github.com/zloirock/core-js) - da muchísimo soporte, pero sin sobrecargar, ya que permite incluir solo las características necesarias.
75+
- [core js](https://github.com/zloirock/core-js) - brinda muchísimo soporte, pero permite incluir solo las características necesarias.
76+
7677
7778
## Resumen
7879
@@ -83,7 +84,7 @@ Pero no olvides usar transpiladores (si usas sintaxis u operadores modernos) y p
8384
Por ejemplo, cuando estés más familiarizado con JavaScript puedes configurar la construcción de código basado en [webpack](https://webpack.js.org/) con el plugin [babel-loader](https://github.com/babel/babel-loader).
8485
8586
Buenos recursos que muestran el estado actual de soporte para varias característica:
86-
- <https://kangax.github.io/compat-table/es6/> - para JavaScript puro.
87+
- <https://compat-table.github.io/compat-table/es6/> - para JavaScript puro.
8788
- <https://caniuse.com/> - para funciones relacionadas al navegador.
8889
8990
P.S. Google Chrome usualmente es el más actualizado con las características del lenguaje, pruébalo si algún demo del tutorial falla. Aunque la mayoría de los demos funciona con cualquier navegador moderno.

Diff for: 1-js/04-object-basics/04-object-methods/8-chain-calls/task.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ let ladder = {
2121
};
2222
```
2323

24-
Ahora, si necesitamos hacer varios llamados en secuencia podemos hacer algo como esto:
24+
Si ahora necesitamos hacer varios llamados en secuencia, podemos hacer algo como esto:
2525

2626
```js
2727
ladder.up();
@@ -32,10 +32,10 @@ ladder.down();
3232
ladder.showStep(); // 0
3333
```
3434

35-
Modifica el código de "arriba" `up`, "abajo" `down` y "mostrar peldaño" `showStep` para hacer los llamados encadenables como esto:
35+
Modifica el código de "arriba" `up`, "abajo" `down` y "mostrar peldaño" `showStep` para hacer los llamados encadenables. Así:
3636

3737
```js
38-
ladder.up().up().down().showStep().down().showStep(); // shows 1 then 0
38+
ladder.up().up().down().showStep().down().showStep(); // muestra 1 luego 0
3939
```
4040

41-
Tal enfoque es ampliamente usado entre las librerías JavaScript.
41+
Tal enfoque es ampliamente usado en librerías JavaScript.

Diff for: 1-js/05-data-types/02-number/article.md

+18-10
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ En JavaScript moderno, hay dos tipos de números:
44

55
1. Los números regulares en JavaScript son almacenados con el formato de 64-bit [IEEE-754](https://es.wikipedia.org/wiki/IEEE_754), conocido como "números de doble precisión de coma flotante". Estos números son los que estaremos usando la mayor parte del tiempo, y hablaremos de ellos en este capítulo.
66

7-
2. Los números BigInt representan enteros de longitud arbitraria. A veces son necesarios porque un número regular no puede exceder <code>2<sup>53</sup></code> ni ser menor a <code>-2<sup>53</sup></code> manteniendo la precisión, algo que mencionamos antes en el capítulo <info:types>. Como los bigints son usados en algunas áreas especiales, les dedicamos un capítulo especial <info:bigint>.
7+
2. Los números BigInt representan enteros de longitud arbitraria. A veces son necesarios porque un número entero regular no puede exceder <code>2<sup>53</sup></code> ni ser menor a <code>-2<sup>53</sup></code> manteniendo la precisión, algo que mencionamos antes en el capítulo <info:types>. Como los bigints son usados en áreas muy especiales, les dedicamos un capítulo especial <info:bigint>.
88

99
Aquí hablaremos de números regulares. Ampliemos lo que ya sabemos de ellos.
1010

@@ -107,9 +107,9 @@ La `base` puede variar entre `2` y `36`. La predeterminada es `10`.
107107

108108
Casos de uso común son:
109109

110-
- **base=16** usada para colores hex, codificación de caracteres, etc; los dígitos pueden ser `0..9` o `A..F`.
111-
- **base=2** mayormente usada para el debug de operaciones de bit, los dígitos pueden ser `0` o `1`.
112-
- **base=36** Es el máximo, los dígitos pueden ser `0..9` o `A..Z`. Aquí el alfabeto inglés completo es usado para representar un número. Un uso peculiar pero práctico para la base `36` es cuando necesitamos convertir un largo identificador numérico en algo más corto, por ejemplo para abreviar una url. Podemos simplemente representarlo en el sistema numeral de base `36`:
110+
- **base=16** usada para colores en hexa, codificación de caracteres, etc.; los dígitos pueden ser `0..9` o `A..F`.
111+
- **base=2** mayormente usada para la depuración de operaciones de bit, los dígitos pueden ser `0` o `1`.
112+
- **base=36** Es la base máxima, los dígitos pueden ser `0..9` o `A..Z`. Aquí el alfabeto inglés completo es usado para representar un número. Un uso peculiar pero práctico para la base `36` es cuando necesitamos convertir un largo identificador numérico en algo más corto, por ejemplo para abreviar una url. Podemos simplemente representarlo en el sistema numeral de base `36`:
113113

114114
```js run
115115
alert( 123456..toString(36) ); // 2n9c
@@ -137,7 +137,7 @@ Hay varias funciones incorporadas para el redondeo:
137137
: Redondea hacia arriba: `3.1` torna en `4`, y `-1.1` torna en `-1`.
138138

139139
`Math.round`
140-
: Redondea hacia el entero más cercano: `3.1` redondea a `3`, `3.6` redondea a `4`, el caso medio `3.5` redondea a `4` también.
140+
: Redondea hacia el entero más cercano: `3.1` redondea a `3`, `3.6` redondea a `4`; los casos medios `3.5` redondea a `4`, y `-3.5` redondea a `-3`.
141141

142142
`Math.trunc` (no soportado en Internet Explorer)
143143
: Remueve lo que haya tras el punto decimal sin redondear: `3.1` torna en `3`, `-1.1` torna en `-1`.
@@ -147,8 +147,10 @@ Aquí, la tabla que resume las diferencias entre ellos:
147147
| | `Math.floor` | `Math.ceil` | `Math.round` | `Math.trunc` |
148148
|---|---------|--------|---------|---------|
149149
|`3.1`| `3` | `4` | `3` | `3` |
150+
|`3.5`| `3` | `4` | `4` | `3` |
150151
|`3.6`| `3` | `4` | `4` | `3` |
151152
|`-1.1`| `-2` | `-1` | `-1` | `-1` |
153+
|`-1.5`| `-2` | `-1` | `-1` | `-1` |
152154
|`-1.6`| `-2` | `-1` | `-2` | `-1` |
153155

154156

@@ -188,7 +190,7 @@ Hay dos formas de hacerlo:
188190
alert( num.toFixed(5) ); // "12.34000", con ceros agregados para dar exactamente 5 dígitos
189191
```
190192

191-
Podemos convertirlo a "number" usando el operador unario más o llamando a `Number()`; por ejemplo, escribir `+num.toFixed(5)`.
193+
Podemos convertirlo a `number` usando el operador unario más `+` o llamando a `Number()`. Por ejemplo, `+num.toFixed(5)`.
192194

193195
## Cálculo impreciso
194196

@@ -222,7 +224,13 @@ alert( 0.1 + 0.2 ); // 0.30000000000000004
222224

223225
Un número es almacenado en memoria en su forma binaria, una secuencia de bits, unos y ceros. Pero decimales como `0.1`, `0.2` que se ven simples en el sistema decimal son realmente fracciones sin fin en su forma binaria.
224226

225-
¿Qué es `0.1`? Es un uno dividido por 10 `1/10`, un décimo. En sistema decimal es fácilmente representable. Compáralo con un tercio: `1/3`, se vuelve una fracción sin fin `0.33333(3)`.
227+
```js run
228+
alert(0.1.toString(2)); // 0.0001100110011001100110011001100110011001100110011001101
229+
alert(0.2.toString(2)); // 0.001100110011001100110011001100110011001100110011001101
230+
alert((0.1 + 0.2).toString(2)); // 0.0100110011001100110011001100110011001100110011001101
231+
```
232+
233+
¿Qué es `0.1`? Es un uno dividido por 10, `1/10`, un décimo. En sistema decimal es fácilmente representable. Compáralo con un tercio: `1/3`, que se vuelve una fracción sin fin `0.33333(3)`.
226234

227235
Así, la división en potencias de diez garantizan un buen funcionamiento en el sistema decimal, pero divisiones por `3` no. Por la misma razón, en el sistema binario la división en potencias de `2` garantizan su funcionamiento, pero `1/10` se vuelve una fracción binaria sin fin.
228236

@@ -235,14 +243,14 @@ Podemos verlo en acción:
235243
alert( 0.1.toFixed(20) ); // 0.10000000000000000555
236244
```
237245

238-
Y cuando sumamos dos números, se apilan sus "pérdidas de precisión".
246+
Y cuando sumamos dos números, sus "pérdidas de precisión" se acumulan.
239247

240248
Y es por ello que `0.1 + 0.2` no es exactamente `0.3`.
241249

242250
```smart header="No solo JavaScript"
243251
El mismo problema existe en muchos otros lenguajes de programación.
244252
245-
PHP, Java, C, Perl, Ruby dan exactamente el mismo resultado, porque ellos están basados en el mismo formato numérico.
253+
PHP, Java, C, Perl, Ruby, dan exactamente el mismo resultado, porque ellos están basados en el mismo formato numérico.
246254
```
247255

248256
¿Podemos resolver el problema? Seguro, la forma más confiable es redondear el resultado con la ayuda de un método. [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed):
@@ -348,7 +356,7 @@ Los métodos [Number.isNaN](https://developer.mozilla.org/es/docs/Web/JavaScript
348356
alert( isNaN("str") ); // true, porque isNaN convierte el string "str" a number y obtiene NaN como resultado de su conversión
349357
```
350358

351-
- `Number.isFinite(value)` devuelve `true` si el argumento pertenece al tipo de dato `number` y no es `NaN/Infinity/-Infinity`. En cualquier otro caso devuelve `false`.
359+
- `Number.isFinite(value)` devuelve `true` si el argumento pertenece al tipo de dato `number` y no es `NaN/Infinity/-Infinity`. En cualquier otro caso devuelve `false`.
352360

353361
```js run
354362
alert( Number.isFinite(123) ); // true

Diff for: 1-js/05-data-types/04-array/article.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@ let matrix = [
426426
[7, 8, 9]
427427
];
428428

429-
alert( matrix[1][1] ); // 5, el elemento central
429+
alert( matrix[0][1] ); // 2, el segundo valor del primer array interno
430430
```
431431

432432
## toString

0 commit comments

Comments
 (0)