Skip to content

Commit add39c5

Browse files
authored
Merge branch 'master' into types
2 parents d704137 + 685a301 commit add39c5

156 files changed

Lines changed: 2708 additions & 2456 deletions

File tree

Some content is hidden

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

1-js/01-getting-started/1-intro/article.md

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,16 +65,14 @@ Ejemplos de tales restricciones incluyen:
6565

6666
- JavaScript en el navegador no puede leer y escribir arbitrariamente archivos en el disco duro, copiarlos o ejecutar programas. No tiene acceso directo a funciones del Sistema operativo (OS).
6767

68-
Los navegadores mas modernos le permiten trabajar con archivos, pero el acceso es limitado y solo permitido si el usuario realiza ciertas acciones, como "arrastrar" un archivo a la ventana del navegador o seleccionarlo por medio de una etiqueta `<input`>.
68+
Los navegadores más modernos le permiten trabajar con archivos, pero el acceso es limitado y solo permitido si el usuario realiza ciertas acciones, como "arrastrar" un archivo a la ventana del navegador o seleccionarlo por medio de una etiqueta `<input`>.
6969

70-
Existen maneras de interactuar con la cámara, micrófono y otros dispositivos, pero eso requiere el permiso explicito del usuario. Por lo tanto, una página habilitada para JavaScript no puede habilitar una cámara web para observar el entorno y enviar la información a la [NSA](https://es.wikipedia.org/wiki/Agencia_de_Seguridad_Nacional).
71-
72-
- Diferentes pestañas y ventanas generalmente no se conocen entre sí. A veces si lo hacen, por ejemplo, cuando una ventana usa JavaScript para abrir otra. Pero incluso en este caso, JavaScript no puede acceder a la otra si provienen de diferentes sitios. (De diferente dominio, protocolo o puerto).
70+
Existen maneras de interactuar con la cámara, micrófono y otros dispositivos, pero eso requiere el permiso explícito del usuario. Por lo tanto, una página habilitada para JavaScript no puede habilitar una cámara web para observar el entorno y enviar la información a la [NSA](https://es.wikipedia.org/wiki/Agencia_de_Seguridad_Nacional).
71+
- Diferentes pestañas y ventanas generalmente no se conocen entre sí. A veces si lo hacen, por ejemplo, cuando una ventana usa JavaScript para abrir otra. Pero incluso en este caso, JavaScript no puede acceder a la otra si provienen de diferentes sitios (de diferente dominio, protocolo o puerto).
7372

7473
Esto es conocido como "política del mismo origen" ("Same Origin Policy"). Para evitar eso, ambas páginas deben contener código especial de JavaScript que permita manejar el intercambio de datos. Cubriremos esto en el tutorial.
7574

76-
Esta limitación es, de nuevo, para la seguridad del usuario. Una página de `http://anysite.com` la cual el usuario ha abierto no debe ser capaz de acceder a otra pestaña del navegador con la URL `http://gmail.com` y robar información de esta otra página.
77-
75+
Esta limitación es, de nuevo, para la seguridad del usuario. Una página de `http://anysite.com` la cual el usuario ha abierto no debe ser capaz de acceder a otra pestaña del navegador con la URL `http://gmail.com` y robar información de esta otra página.
7876
- JavaScript puede fácilmente comunicarse a través de la red con el servidor de donde la página actual proviene. Pero su capacidad para recibir información de otros sitios y dominios esta bloqueada. Aunque sea posible, esto requiere un acuerdo explícito (expresado en los encabezados HTTP) desde el sitio remoto. Una vez más, esto es una limitación de seguridad.
7977

8078
![](limitations.svg)
@@ -90,7 +88,6 @@ Existen al menos _tres_ cosas geniales sobre JavaScript:
9088
+ Las cosas simples se hacen de manera simple.
9189
+ Soportado por la mayoría de los navegadores y habilitado de forma predeterminada.
9290
```
93-
9491
JavaScript es la única tecnología de los navegadores que combina estas tres cosas.
9592

9693
Eso es lo que hace a JavaScript único. Por esto es la herramienta mas extendida para crear interfaces de navegador.

1-js/02-first-steps/05-types/article.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,14 @@ const bigInt = 1234567890123456789012345678901234567890n;
8282
Como los números `BigInt` rara vez se necesitan, no los cubrimos aquí sino que les dedicamos un capítulo separado <info: bigint>. Léelo cuando necesites números tan grandes.
8383

8484

85+
8586
```smart header="Problemas de compatibilidad"
8687
En este momento, `BigInt` es compatible con Firefox / Chrome / Edge / Safari, pero no con IE.
8788
```
8889

8990
Puedes revisar la [tabla de compatibilidad de BigInt en *MDN*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Browser_compatibility) para saber qué versiones de navegador tienen soporte.
9091

9192
## String
92-
9393
Un string (cadena de caracteres) en JavaScript debe colocarse entre comillas.
9494

9595
```js
@@ -129,7 +129,6 @@ En el capítulo <info:string> trataremos más a fondo las cadenas.
129129
130130
```smart header="No existe el tipo *carácter*".
131131
En algunos idiomas, hay un tipo especial "carácter" para un solo carácter. Por ejemplo, en el lenguaje C y en Java es `char`.
132-
133132
En JavaScript no existe tal tipo. Sólo hay un tipo: `string`. Un string puede estar formado por un solo carácter o por varios de ellos.
134133
```
135134
@@ -260,11 +259,11 @@ Hay 8 tipos básicos en JavaScript.
260259

261260
- `number` para números de cualquier tipo: enteros o de punto flotante, los enteros están limitados por <code>±(2<sup>53</sup>-1)</code>.
262261
- `bigint` para números enteros de longitud arbitraria.
263-
- `string` para cadenas. Una cadena puede tener uno o más caracteres, no hay un tipo especial para un único carácter.
264-
- `boolean` para `tru`/`false`.
265-
- `null` para valores desconocidos: un tipo independiente que tiene un único valor `nulo`.
266-
- `undefined` para valores no asignados: un tipo independiente que tiene un único valor `indefinido`.
267-
- `object` para estructuras de datos más complejas.
262+
- `string` para cadenas. Una cadena puede tener cero o más caracteres, no hay un tipo especial para un único carácter.
263+
- `boolean` para verdadero y falso: `true`/`false`.
264+
- `null` para valores desconocidos -- un tipo independiente que tiene un solo valor nulo: `null`.
265+
- `undefined` para valores no asignados -- un tipo independiente que tiene un único valor "indefinido": `undefined`.
266+
- `object` para estructuras de datos complejas.
268267
- `symbol` para identificadores únicos.
269268

270269
El operador `typeof` nos permite ver qué tipo está almacenado en una variable.

1-js/02-first-steps/06-alert-prompt-confirm/article.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ Muestra una ventana modal con un mensaje de texto, un campo de entrada para el v
3030
`default`
3131
: Un segundo parámetro opcional, el valor inicial del campo de entrada.
3232

33-
El usuario puede escribir algo en el campo de entrada de solicitud y presionar OK. Luego obtenemos ese texto en el `resultado`. O pueden cancelar la entrada presionando Cancelar o presionando la tecla `: Esc`, luego obtenemos `null` como el `result`.
33+
```smart header="Corchetes en la sintaxis `[...]`"
34+
Los corchetes alrededor de `default` en la sintaxis de arriba denotan que el parámetro es opcional, no requerido.
35+
```
36+
37+
El usuario puede escribir algo en el campo de entrada de solicitud y presionar OK. Luego obtenemos ese texto en el `resultado`. O pueden cancelar la entrada presionando Cancelar o presionando la tecla `: Esc` obteniendo `null` como `result`.
3438
3539
La llamada a `prompt` retorna el texto del campo de entrada o `null` si la entrada fue cancelada.
3640

1-js/02-first-steps/08-operators/4-fix-prompt/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ let b = "2"; // prompt("¿Segundo número?", 2);
99
alert(a + b); // 12
1010
```
1111

12-
Lo que debemos hacer es convertir las cadenas de texto a números antes `+`. Por ejemplo, utilizando `Number()` o anteponiendo `+`.
12+
Lo que debemos hacer es convertir las cadenas de texto a números antes de `+`. Por ejemplo, utilizando `Number()` o anteponiendo `+`.
1313

1414
Por ejemplo, justo antes de `prompt`:
1515

1-js/02-first-steps/08-operators/article.md

Lines changed: 105 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Operadores
1+
# Operadores básicos, matemáticas
22

3-
Conocemos varios operadores de la escuela. Son cosas como la suma `+`, multiplicación `*`, resta `-`, etcétera.
3+
Conocemos varios operadores matemáticos porque nos los enseñaron en la escuela. Son cosas como la suma `+`, multiplicación `*`, resta `-`, etcétera.
44

55
En este capítulo, nos vamos a concentrar en los aspectos de los operadores que no están cubiertos en la aritmética escolar.
66

@@ -26,9 +26,55 @@ Antes de continuar, comprendamos la terminología común.
2626
alert( y - x ); // 2, binario negativo resta valores
2727
```
2828

29-
Formalmente, estamos hablando de dos operadores distintos: la negación unaria (un operando: revierte el sómbolo) and la resta binaria (dos operandos: resta).
29+
Formalmente, estamos hablando de dos operadores distintos: la negación unaria (un operando: revierte el símbolo) y la resta binaria (dos operandos: resta).
3030

31-
## Concatenación de cadenas, binario +
31+
## Matemáticas
32+
33+
Están soportadas las siguientes operaciones:
34+
35+
- Suma `+`,
36+
- Resta `-`,
37+
- Multiplicación `*`,
38+
- División `/`,
39+
- Resto `%`,
40+
- Exponenciación `**`.
41+
42+
Los primeros cuatro son conocidos mientras que `%` y `**` deben ser explicados más ampliamente.
43+
44+
## Resto %
45+
46+
El operador resto `%`, a pesar de su apariencia, no está relacionado con porcentajes.
47+
48+
El resultado de `a % b` es el [resto](https://es.wikipedia.org/wiki/Resto) de la división entera de `a` por `b`.
49+
50+
Por ejemplo:
51+
52+
```js run
53+
alert( 5 % 2 ); // 1 es un resto de 5 dividido por 2
54+
alert( 8 % 3 ); // 2 es un resto de 8 dividido por 3
55+
```
56+
57+
## Exponenciación **
58+
59+
El operador de exponenciación `**` es una inclusión reciente al lenguaje.
60+
61+
Por ejemplo:
62+
63+
```js run
64+
alert( 2 ** 2 ); // 4 (2 * 2)
65+
alert( 2 ** 3 ); // 8 (2 * 2 * 2)
66+
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
67+
```
68+
69+
Matemáticamente, la exponenciación es definida para números no enteros también, Por ejemplo la raíz cuadrada es el exponente `1/2`:
70+
71+
```js run
72+
alert( 4 ** (1/2) ); // 2 (potencia de 1/2 es lo mismo que raíz cuadrada, eso es matemáticas)
73+
alert( 8 ** (1/3) ); // 2 (potencia de 1/3 es lo mismo que raíz cúbica)
74+
```
75+
76+
77+
## Concatenación de cadenas con el binario +
3278

3379
Ahora veamos características especiales de JavaScript que van más allá de las aritméticas escolares.
3480

@@ -50,16 +96,17 @@ alert( '1' + 2 ); // "12"
5096
alert( 2 + '1' ); // "21"
5197
```
5298

53-
Vieron, no importa si el primer operando es una cadena o el segundo. La regla es simple: si cualquiera de los operandos es una cadena, el otro también se convierte en una cadena.
54-
55-
Sin embargo, tenga en cuenta que las operaciones se ejecutan de izquierda a derecha. Si hay dos números seguidos de una cadena, los números se agregarán antes de convertirlos en una cadena:
99+
Vieron, no importa si el primer operando es una cadena o el segundo.
56100

101+
Aquí hay un ejemplo algo más complejo:
57102

58103
```js run
59104
alert(2 + 2 + '1' ); // "41" y no "221"
60105
```
61106

62-
Concatenación de cadena y conversión es una característica especial del operador binario suma `+`. Otros operadores aritméticos sólo funcionan con números y siempre convierten sus operandos a números.
107+
Aquí, los operandores trabajan uno después de otro. El primer `+` suma dos números entonces devuelve `4`, luego el siguiente `+` le agrega la cadena `1`, así que se evalúa como `4 + '1' = 41`.
108+
109+
El binario `+` es el único operador que soporta cadenas en esa forma. Otros operadores matemáticos trabajan solamente con números y siempre convierten sus operandos a números.
63110

64111
Por ejemplo, resta y división:
65112

@@ -95,8 +142,6 @@ Realmente hace lo mismo que `Number(...)`, pero es más corto.
95142

96143
La necesidad de convertir cadenas en números surge con mucha frecuencia. Por ejemplo, si estamos obteniendo valores de campos de formulario HTML, generalmente son cadenas.
97144

98-
¿Qué pasa si queremos sumarlos?
99-
100145
El operador binario suma los agregaría como cadenas:
101146

102147
```js run
@@ -135,13 +180,14 @@ Los paréntesis anulan cualquier precedencia, por lo que si no estamos satisfech
135180

136181
Hay muchos operadores en JavaScript. Cada operador tiene un número de precedencia correspondiente. El que tiene el número más grande se ejecuta primero. Si la precedencia es la misma, el orden de ejecución es de izquierda a derecha.
137182

138-
Aquí hay un extracto de la [tabla de precedencia] (https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Operator_Precedence) (no necesita recordar esto, pero tenga en cuenta que los operadores unarios son más altos que el operador binario correspondiente):
183+
Aquí hay un extracto de la [tabla de precedencia](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Operator_Precedence) (no necesita recordar esto, pero tenga en cuenta que los operadores unarios son más altos que el operador binario correspondiente):
139184

140185
| Precedencia| Nombre | Signo |
141186
|------------|------|------|
142187
| ... | ... | ... |
143188
| 16 | suma unaria | `+` |
144189
| 16 | negación unaria | `-` |
190+
| 16 | exponenciación | `**` |
145191
| 14 | multiplicación | `*` |
146192
| 14 | division | `/` |
147193
| 13 | suma | `+` |
@@ -164,24 +210,11 @@ let x = 2 * 2 + 1;
164210
alert( x ); // 5
165211
```
166212

167-
Es posible encadenar asignaciones:
213+
### Asignación = devuelve un valor
168214

169-
```js run
170-
let a, b, c;
171-
172-
*!*
173-
a = b = c = 2 + 2;
174-
*/!*
175-
176-
alert( a ); // 4
177-
alert( b ); // 4
178-
alert( c ); // 4
179-
```
180-
181-
Las asignaciones encadenadas evalúan de derecha a izquierda. Primero, se evalúa la expresión más a la derecha `2 + 2` y luego se asigna a las variables de la izquierda: `c`, `b` y `a`. Al final, todas las variables comparten un solo valor.
215+
El hecho de que `=` sea un operador, no un construcción "mágica" del lenguaje, tiene un implicanción interesante.
182216

183-
````smart header="El operador asignación `\"=\"` devuelve un valor"
184-
Un operador siempre devuelve un valor. Eso es obvio para la mayoría de ellos, como la suma `+` o la multiplicación `*`. Pero el operador de asignación también sigue esta regla.
217+
La mayoría de los operadores en JavaScript devuelven un valor. Esto es obvio para `+` y `-`, pero también es cierto para `=`.
185218

186219
La llamada `x = value` escribe el `value` en `x` *y luego lo devuelve*.
187220

@@ -201,44 +234,69 @@ alert( c ); // 0
201234

202235
En el ejemplo anterior, el resultado de la expresión `(a = b + 1)` es el valor asignado a `a` (es decir, `3`). Luego se usa para evaluaciones adicionales.
203236

204-
Código gracioso, ¿no? Deberíamos entender cómo funciona, porque a veces lo vemos en las bibliotecas de JavaScript, pero no deberíamos escribir algo así. Tales trucos definitivamente no hacen que el código sea más claro o legible.
205-
````
237+
Código gracioso, ¿no? Deberíamos entender cómo funciona, porque a veces lo vemos en las bibliotecas de JavaScript.
206238

207-
## Resto %
239+
Pero no deberíamos escribir algo así. Tales trucos definitivamente no hacen que el código sea más claro o legible.
208240

209-
El operador resto `%`, a pesar de su apariencia, no está relacionado con porcentajes.
241+
### Asignaciones encadenadas
210242

211-
El resultado de `a % b` es el resto de la división entera de `a` por `b`.
212-
213-
Por ejemplo:
243+
Otra característica interesante es la habilidad para encadenar asignaciones:
214244

215245
```js run
216-
alert( 5 % 2 ); // 1 es un resto de 5 dividido por 2
217-
alert( 8 % 3 ); // 2 es un resto de 8 dividido por 3
218-
alert( 6 % 3 ); // 0 es un resto de 6 dividido por 3
246+
let a, b, c;
247+
248+
*!*
249+
a = b = c = 2 + 2;
250+
*/!*
251+
252+
alert( a ); // 4
253+
alert( b ); // 4
254+
alert( c ); // 4
219255
```
220256

221-
## Exponenciación **
257+
Las asignaciones encadenadas evalúan de derecha a izquierda. Primero, se evalúa la expresión más a la derecha `2 + 2` y luego se asigna a las variables de la izquierda: `c`, `b` y `a`. Al final, todas las variables comparten un solo valor.
222258

223-
El operador de exponenciación `**` es una inclusión reciente al lenguaje.
259+
Una vez más, con el propósito de la legibilidad es mejor separa tal código en unas pocas líneas:
224260

225-
Para un número natural `b`, el resultado de `a ** b` es `a` multiplicado por sí mismos `b` veces.
261+
```js
262+
c = 2 + 2;
263+
b = c;
264+
a = c;
265+
```
266+
Es más fácil de leer, especialmente cuando se hace de un vistazo.
267+
268+
## Modificar en el lugar
269+
270+
A menudo necesitamos aplicar un operador a una variable y guardar el nuevo resultado en esa misma variable.
226271

227272
Por ejemplo:
228273

274+
```js
275+
let n = 2;
276+
n = n + 5;
277+
n = n * 2;
278+
```
279+
280+
Esta notación puede ser acortada utilizando los operadores `+=` y `*=`:
281+
229282
```js run
230-
alert( 2 ** 2 ); // 4 (2 * 2)
231-
alert( 2 ** 3 ); // 8 (2 * 2 * 2)
232-
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
283+
let n = 2;
284+
n += 5; // ahora n = 7 (lo mismo que n = n + 5)
285+
n *= 2; // ahora n = 14 (lo mismo que n = n * 2)
286+
287+
alert( n ); // 14
233288
```
234289

235-
El operador también funciona para números no enteros.
290+
Los operadores cortos "modifica y asigna" existen para todos los operadores aritméticos y de nivel bit: `/=`, `-=`, etcétera.
236291

237-
Por ejemplo:
292+
Tales operadores tienen la misma precedencia que la asignación normal, por lo tanto se ejecutan después de otros cálculos:
238293

239294
```js run
240-
alert( 4 ** (1/2) ); // 2 (potencia de 1/2 es lo mismo que raíz cuadrada, eso es matemáticas)
241-
alert( 8 ** (1/3) ); // 2 (potencia de 1/3 es lo mismo que raíz cúbica)
295+
let n = 2;
296+
297+
n *= 3 + 5;
298+
299+
alert( n ); // 16 (lado derecho evaluado primero, lo mismo que n *= 8)
242300
```
243301

244302
## Incremento/decremento
@@ -372,40 +430,6 @@ La lista de operadores:
372430

373431
Estos operadores se usan muy raramente. Para comprenderlos, necesitamos profundizar en la representación de números de bajo nivel y no sería óptimo hacerlo en este momento, especialmente porque no los necesitaremos pronto. Si tienes curiosidad, puedes leer el artículo [Operadores a nivel de bit](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Bitwise_Operators#Bitwise_AND) en MDN. Sería más práctico hacerlo cuando surja una necesidad real.
374432

375-
## Modificar en el lugar
376-
377-
A menudo necesitamos aplicar un operador a una variable y guardar el nuevo resultado en esa misma variable.
378-
379-
Por ejemplo:
380-
381-
```js
382-
let n = 2;
383-
n = n + 5;
384-
n = n * 2;
385-
```
386-
387-
Esta notación puede ser acortada utilizando los operadores `+=` y `*=`:
388-
389-
```js run
390-
let n = 2;
391-
n += 5; // ahora n = 7 (lo mismo que n = n + 5)
392-
n *= 2; // ahora n = 14 (lo mismo que n = n * 2)
393-
394-
alert( n ); // 14
395-
```
396-
397-
Los operadores cortos "modifica y asigna" existen para todos los operadores aritméticos y de nivel bit: `/=`, `-=`, etcétera.
398-
399-
Tales operadores tienen la misma precedencia que la asignación normal, por lo tanto se ejecutan después de otros cálculos:
400-
401-
```js run
402-
let n = 2;
403-
404-
n *= 3 + 5;
405-
406-
alert( n ); // 16 (lado derecho evaluado primero, lo mismo que n *= 8)
407-
```
408-
409433
## Coma
410434

411435
El operador coma `,` es uno de los operadores más raros e inusuales. A veces, es utilizado para escribir código más corto, entonces tenemos que saberlo para poder entender qué está pasando.

1-js/02-first-steps/09-comparison/1-comparison-questions/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ Algunas de las razones:
1717
3. Una vez más, la comparación lexicográfica, el primer carácter de `"2"` es mayor que el primer carácter de `"1"`.
1818
4. Los valores `null` y `undefined` son iguales entre sí solamente.
1919
5. La igualdad estricta es estricta. Diferentes tipos de ambos lados conducen a false.
20-
6. Similar a (4).
20+
6. Similar a (4), `null` solamente es igual a `undefined`.
2121
7. Igualdad estricta de diferentes tipos.

1-js/02-first-steps/09-comparison/article.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ El algoritmo para comparar dos cadenas es simple:
5757
4. Repita hasta el final de cada cadena.
5858
5. Si ambas cadenas tienen la misma longitud, entonces son iguales. De lo contrario, la cadena más larga es mayor.
5959

60-
En los ejemplos anteriores, la comparación `'Z' > 'A'` llega a un resultado en el primer paso, mientras que las cadenas `"Glow"` y `"Glee"` se comparan carácter por carácter:
60+
En los ejemplos anteriores, la comparación `'Z' > 'A'` llega a un resultado en el primer paso.
61+
62+
La segunda comparación `"Glow"` y `"Glee"` necesitan más pasos, se comparan carácter por carácter:
6163

6264
1. `G` es igual que `G`.
6365
2. `l` es igual que `l`.

1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ importance: 3
44

55
# Comprueba el rango por dentro
66

7-
Escribe una condición "if" para comprobar que `age`(edad) está entre `14` y `90` inclusivamente.
7+
Escribe una condición "if" para comprobar que `age`(edad) está entre `14` y `90` inclusive.
88

9-
"Inclusivamente" significa que `age` puede llegar a ser uno de los extremos, `14` o `90`.
9+
"Inclusive" significa que `age` puede llegar a ser uno de los extremos, `14` o `90`.

0 commit comments

Comments
 (0)