Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
ce70814
Update article.md
paroche Feb 7, 2020
3cab277
Confucius never said black cat quote
leeyc0 May 16, 2020
16273f9
Update article.md
leeyc0 May 18, 2020
9e678da
Update article.md
leeyc0 May 18, 2020
289833c
Change to Tao Te Ching
leeyc0 May 26, 2020
b21675a
Update article.md
leeyc0 May 26, 2020
cf64a79
Update article.md
leeyc0 May 26, 2020
c2f8c4f
Update article.md
leviding Jul 18, 2020
85b1e7a
Update article.md
haond10adp Jul 23, 2020
8f3831b
One line of code creates a lot of confusing
lumosmind Jul 23, 2020
b105548
misplaced "too"?
joaquinelio Aug 30, 2020
5c4adfa
The last 2 code snippets shouldn't be runnable
peachesontour Aug 30, 2020
3aaf519
suggestion to use alert method not console.log
Violet-Bora-Lee Aug 30, 2020
4bd8ce5
fix typo and minor grammatical error
Violet-Bora-Lee Aug 30, 2020
51e5aa9
Typos
peachesontour Aug 30, 2020
b9c4dbc
Typos
peachesontour Aug 30, 2020
4830a26
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
d929841
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
2881c97
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
0017800
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
751f78a
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
2b5502a
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
8d71d86
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
be28fe2
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
0003221
Update article.md
peachesontour Sep 1, 2020
cb9542b
Update 2-ui/99-ui-misc/03-event-loop/article.md
peachesontour Sep 1, 2020
6895d38
Update 2-ui/99-ui-misc/03-event-loop/article.md
peachesontour Sep 1, 2020
cd3fb86
Update 2-ui/99-ui-misc/01-mutation-observer/article.md
peachesontour Sep 1, 2020
2f4747b
minor fixes
iliakan Sep 3, 2020
c658bb3
add missing closing bracket
yoga1234 Sep 3, 2020
0f5b63d
Restructure the Solution for 'Army of Functions' task and Fix Typos
MuhammedZakir Sep 1, 2020
c1cd076
Update article.md
hsnilsson Sep 4, 2020
2bf5add
Typo
pushpend3r Sep 4, 2020
c0d638a
minor fixes
iliakan Sep 5, 2020
2f1f6a1
Merge pull request #2100 from yoga1234/patch-1
iliakan Sep 5, 2020
7fd4f7d
Merge pull request #2101 from henchies/patch-2
iliakan Sep 5, 2020
d1e4981
Merge pull request #2102 from pushpend3r/patch-2
iliakan Sep 5, 2020
6701d9b
Merge pull request #2096 from peachesontour/patch-12
iliakan Sep 5, 2020
30386fc
Merge pull request #2095 from peachesontour/patch-11
iliakan Sep 5, 2020
952c13a
minor fixes
iliakan Sep 5, 2020
d36db20
Merge pull request #2094 from Violet-Bora-Lee/mouse-event-typo
iliakan Sep 5, 2020
92e9028
Merge pull request #2093 from Violet-Bora-Lee/class-inheritance-sugge…
iliakan Sep 5, 2020
0b7f426
Merge pull request #2092 from peachesontour/patch-10
iliakan Sep 5, 2020
fe6e352
Merge pull request #2091 from joaquinelio/patch-1
iliakan Sep 5, 2020
94279ab
Merge pull request #1738 from javascript-tutorial/paroche-patch-18
iliakan Sep 5, 2020
c1a3778
Merge pull request #1907 from leeyc0/patch-1
iliakan Sep 5, 2020
88ad89f
Merge pull request #2015 from leviding/patch-21
iliakan Sep 5, 2020
ba5424a
minor fixes
iliakan Sep 5, 2020
edc6126
Merge pull request #2024 from lumosmind/patch-47
iliakan Sep 5, 2020
ffa154d
Merge pull request #2023 from haond10adp/master
iliakan Sep 5, 2020
2aa7e55
minor fixes
iliakan Sep 5, 2020
a9c170a
minor fixes
iliakan Sep 5, 2020
58f6599
minor fixes
iliakan Sep 5, 2020
2e192e0
Sync safe Number borders across chapter 1.2.5
vsemozhetbyt Sep 6, 2020
5a41a67
Update article.md
LitStronger Sep 7, 2020
dc5de48
Fix typo in 1.2.6
vsemozhetbyt Sep 8, 2020
8d69206
Update article.md
Jarvis-3000 Sep 9, 2020
e845b5f
Update article.md
cristian-wang Sep 9, 2020
ce37f7c
Corrected spelling of "representation"
apcurran Sep 9, 2020
9f099db
Update solution.md
MuhammedZakir Sep 10, 2020
b64a230
refactor PEvents
iliakan Sep 10, 2020
0168147
Merge pull request #2081 from MuhammedZakir/master
iliakan Sep 10, 2020
c65a1e8
WIP
iliakan Sep 10, 2020
9f686c9
improve makeArmy task
iliakan Sep 10, 2020
14b50ca
Some Corrections
MuhammedZakir Sep 11, 2020
164ae2c
Improve 'long polling' article. Complements javascript-tutorial#2073.
MuhammedZakir Sep 11, 2020
d16cec5
Merge pull request #2112 from MuhammedZakir/some-corrections
iliakan Sep 11, 2020
99caa80
Fix javascript-tutorial#2098 - replace let with var in IIFE example
MuhammedZakir Sep 11, 2020
c040a90
Added requested change
MuhammedZakir Sep 11, 2020
17faacf
minor
iliakan Sep 12, 2020
593a920
Merge pull request #2114 from MuhammedZakir/old-var-article
iliakan Sep 12, 2020
a641a1a
Merge pull request #2113 from MuhammedZakir/5-10-long-polling
iliakan Sep 12, 2020
706e7ac
minor fixes
iliakan Sep 12, 2020
f56f815
Merge pull request #2111 from apcurran/patch-1
iliakan Sep 12, 2020
e93e87d
Merge pull request #2110 from cristian-wang/patch-1
iliakan Sep 12, 2020
4de92d6
minor fixes
iliakan Sep 12, 2020
f95cdc6
Merge pull request #2106 from vsemozhetbyt/ch-1-2-5
iliakan Sep 12, 2020
a02f06c
Merge pull request #2107 from LitStronger/patch-1
iliakan Sep 12, 2020
7045666
Merge pull request #2108 from vsemozhetbyt/ch-1-2-6
iliakan Sep 12, 2020
e4a60f4
Merge pull request #2109 from Jarvis-3000/patch-1
iliakan Sep 12, 2020
bd8e8a9
minor fixes
iliakan Sep 12, 2020
62e8e70
Dynamic script async=false condition correction
amit-kumar-cse Sep 13, 2020
c1e7bcb
minor fixes
iliakan Sep 13, 2020
2add921
minor fixes
iliakan Sep 13, 2020
ff152b1
minor fixes
iliakan Sep 13, 2020
79ba52a
Fix link in 1.2.8
vsemozhetbyt Sep 13, 2020
dd24d33
Merge pull request #2117 from vsemozhetbyt/patch-1
iliakan Sep 14, 2020
e074a5f
minor fixes
iliakan Sep 15, 2020
8e7e13d
Fix old link and excess line break in 1.2.8
vsemozhetbyt Sep 16, 2020
7ab911c
Update article.md
zzy0302 Sep 17, 2020
26e6412
Update article.md
zzy0302 Sep 17, 2020
244e7ab
Delete "Trident"
Isildur46 Sep 17, 2020
2f37f1c
Update article.md
zzy0302 Sep 17, 2020
9964e3f
Update article.md
zzy0302 Sep 17, 2020
1e0b2bf
Update article.md
leviding Sep 17, 2020
1480263
Update article.md
zzy0302 Sep 17, 2020
a4b95f0
Add Edge to list of V8-powered browsers
shanesc Sep 17, 2020
c040a01
Typos
peachesontour Sep 17, 2020
fdf8eb3
Improve make-army task
MuhammedZakir Sep 18, 2020
7b88ad9
Update 6-data-storage/03-indexeddb/article.md
peachesontour Sep 18, 2020
d235632
Update 6-data-storage/03-indexeddb/article.md
peachesontour Sep 18, 2020
d56c49e
Update 6-data-storage/03-indexeddb/article.md
peachesontour Sep 18, 2020
172ef78
Update 6-data-storage/03-indexeddb/article.md
peachesontour Sep 18, 2020
3a64e50
Update 1-js/02-first-steps/05-types/article.md
zzy0302 Sep 21, 2020
82b6a3b
mdn links
joaquinelio Sep 21, 2020
85cbc1c
Merge pull request #2139 from joaquinelio/linky
iliakan Sep 21, 2020
e7f6a88
Merge pull request #2126 from peachesontour/patch-13
iliakan Sep 22, 2020
8a330b3
One more step please
joaquinelio Sep 22, 2020
75680ee
Merge pull request #2142 from joaquinelio/patch-1
iliakan Sep 22, 2020
64f3015
Address some possible issues in 1.2.11
vsemozhetbyt Sep 20, 2020
24d8890
Merge 'enstream into susyprimavera
joaquinelio Sep 23, 2020
5c388dd
content
iliakan Sep 23, 2020
2aad40b
Merge pull request #2134 from vsemozhetbyt/1.2.11
iliakan Sep 23, 2020
894e1b5
minor fixes
iliakan Sep 23, 2020
c48c52c
Merge pull request #2127 from MuhammedZakir/master
iliakan Sep 23, 2020
e61bfa2
minor fixes
iliakan Sep 23, 2020
5878a19
Merge pull request #2123 from leviding/patch-22
iliakan Sep 23, 2020
b3a826e
Merge pull request #2122 from Isildur46/fix-Trident-is-not-a-JS-engine
iliakan Sep 23, 2020
6ea208b
Merge pull request #2116 from amit1702/master
iliakan Sep 23, 2020
01e87b5
Merge pull request #2118 from vsemozhetbyt/ch-1-2-8
iliakan Sep 23, 2020
d3ad4c3
Fix grammar and construction in 2.1.10
galacemiguel Dec 11, 2019
482ca75
Merge branch 'master' into patch-1
galacemiguel Sep 23, 2020
8cb4268
Merge pull request #1672 from galacemiguel/patch-1
iliakan Sep 23, 2020
26505f3
Merge pull request #2121 from zzy0302/master
iliakan Sep 23, 2020
071efd8
Address some possible inconsistencies in 1.2.9
vsemozhetbyt Sep 18, 2020
165ea83
Merge pull request #2125 from shanesc/patch-1
iliakan Sep 24, 2020
e968646
minor fixes, close #2137
iliakan Sep 24, 2020
6d9b443
Changed "position" to "index" for slice() method
Ruslan-Aleev Sep 24, 2020
9705a09
minor fixes
iliakan Sep 24, 2020
1f8b72b
Merge pull request #2146 from Ruslan-Aleev/patch-1
iliakan Sep 24, 2020
58ed032
Merge pull request #2129 from vsemozhetbyt/ch-1-2-9
iliakan Sep 24, 2020
b18b5ba
minor fixes
iliakan Sep 24, 2020
e76cf3a
closes #2136 #2150
iliakan Sep 24, 2020
e4c928b
minor fixes
iliakan Sep 24, 2020
2d63151
minor fixes
iliakan Sep 24, 2020
d92cb47
minor fixes
iliakan Sep 24, 2020
2f6e4a2
minor fixes
iliakan Sep 24, 2020
ea673f4
minor fixes
iliakan Sep 24, 2020
a6017db
minor fixes
iliakan Sep 24, 2020
740a2df
Fix typo in 1.2.12
vsemozhetbyt Sep 27, 2020
f489145
Merge pull request #2154 from vsemozhetbyt/patch-1
iliakan Sep 27, 2020
ecfd113
minor
iliakan Oct 1, 2020
181cc78
minor fixes
iliakan Oct 4, 2020
6fca8a4
minor fixes
iliakan Oct 5, 2020
4320617
Fix syntax enumeration in 1.4.7
vsemozhetbyt Oct 5, 2020
ae06ca6
Merge pull request #2168 from vsemozhetbyt/patch-3
lex111 Oct 5, 2020
f409905
minor fixes
iliakan Oct 5, 2020
545f514
Remove extra trailing style tag
lex111 Oct 5, 2020
f4cf580
minor fixes
iliakan Oct 6, 2020
076b414
Merge remote-tracking branch 'upstream/master'
joaquinelio Oct 7, 2020
3737f72
Merge remote-tracking branch 'enstream/master' into susyprimavera
joaquinelio Oct 7, 2020
c288d73
Update article.md
joaquinelio Oct 7, 2020
23d9c9d
Update article.md
joaquinelio Oct 7, 2020
9dee741
Update article.md
joaquinelio Oct 7, 2020
0cda0fd
Update article.md
joaquinelio Oct 7, 2020
b5fe7ed
Update article.md
joaquinelio Oct 7, 2020
6e91b04
Update article.md
joaquinelio Oct 7, 2020
ac7ca05
Update article.md
joaquinelio Oct 7, 2020
6876133
Update article.md
joaquinelio Oct 7, 2020
e577518
Update article.md
joaquinelio Oct 7, 2020
204e00c
Update article.md
joaquinelio Oct 7, 2020
0e1bd5b
Update article.md
joaquinelio Oct 7, 2020
a16e9a1
Update article.md
joaquinelio Oct 7, 2020
e398b58
Update article.md
joaquinelio Oct 7, 2020
585377f
uh, un cero caracteres :P
joaquinelio Oct 7, 2020
e5e1b7c
Apply suggestions from @vplentinax
joaquinelio Oct 7, 2020
989890c
Update 1-js/07-object-properties/01-property-descriptors/article.md
joaquinelio Oct 7, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions 1-js/02-first-steps/05-types/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,13 @@ const bigInt = 1234567890123456789012345678901234567890n;

Como los números `BigInt` rara vez se necesitan, no los cubrimos aquí, sino que les dedicamos un capítulo separado <info: bigint>. Léalo cuando necesite números tan grandes.


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

Puedes revissar la [tabla de compatibilidad BigInt de *MDN*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Browser_compatibility) para conocer las versiones de navegadores soportadas.

## Un string

Un string (cadena de caracteres) en JavaScript debe estar encerrado entre comillas.
Expand Down Expand Up @@ -127,7 +130,7 @@ En el capítulo <info:string> trataremos más a fondo las cadenas.
```smart header="No existe el tipo *carácter*".
En algunos lenguajes, hay un tipo especial "carácter" para un solo carácter. Por ejemplo, en el lenguaje C y en Java es `char`.

En JavaScript no existe tal tipo. Sólo hay un tipo: `string`. Una cadena puede estar formada por un solo carácter o por varios de ellos.
En JavaScript no existe tal tipo. Sólo hay un tipo: `string`. Una cadena puede estar formada por cero caracteres (estar vacía), un carácter o por varios de ellos.
```

## Un boolean (tipo lógico)
Expand Down Expand Up @@ -257,7 +260,7 @@ Hay 8 tipos básicos en JavaScript.

- `number` para números de cualquier tipo: enteros o en punto flotante. Los enteros están limitados a ±2<sup>53</sup>.
- `bigint` para números enteros de longitud arbitraria.
- `string` para cadenas. Una cadena puede tener uno o más caracteres, no hay un tipo especial para un único carácter.
- `string` para cadenas. Una cadena puede tener cero o más caracteres, no hay un tipo especial para un único carácter.
- `boolean` para verdadero y falso: `true`/`false`.
- `null` para valores desconocidos -- un tipo independiente que tiene un solo valor nulo: `null`.
- `undefined` para valores no asignados -- un tipo independiente que tiene un único valor "indefinido": `undefined`.
Expand Down
6 changes: 5 additions & 1 deletion 1-js/02-first-steps/06-alert-prompt-confirm/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@ Muestra una ventana modal con un mensaje de texto, un campo de entrada para el v
`default`
: Un segundo parámetro opcional, el valor inicial del campo de entrada.

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`.
```smart header="Corchetes en la sintaxis `[...]`"
Los corchetes alrededor de `default` en la sintaxis de arriba denotan que el parámetro es opcional, no requerido.
```

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`.

La llamada a `prompt` retorna el texto del campo de entrada o `null` si la entrada fue cancelada.

Expand Down
2 changes: 1 addition & 1 deletion 1-js/02-first-steps/08-operators/4-fix-prompt/solution.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ let b = "2"; // prompt("¿Segundo número?", 2);
alert(a + b); // 12
```

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

Por ejemplo, justo antes de `prompt`:

Expand Down
186 changes: 105 additions & 81 deletions 1-js/02-first-steps/08-operators/article.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Operadores
# Operadores básicos, matemáticas

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

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

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

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

## Concatenación de cadenas, binario +
## Matemáticas

Están soportadas las siguientes operaciones:

- Suma `+`,
- Resta `-`,
- Multiplicación `*`,
- División `/`,
- Resto `%`,
- Exponenciación `**`.

Los primeros cuatro son conocidos mientras que `%` y `**` deben ser explicados más ampliamente.

## Resto %

El operador resto `%`, a pesar de su apariencia, no está relacionado con porcentajes.

El resultado de `a % b` es el [resto](https://es.wikipedia.org/wiki/Resto) de la división entera de `a` por `b`.

Por ejemplo:

```js run
alert( 5 % 2 ); // 1 es un resto de 5 dividido por 2
alert( 8 % 3 ); // 2 es un resto de 8 dividido por 3
```

## Exponenciación **

El operador de exponenciación `**` es una inclusión reciente al lenguaje.

Por ejemplo:

```js run
alert( 2 ** 2 ); // 4 (2 * 2)
alert( 2 ** 3 ); // 8 (2 * 2 * 2)
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
```

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`:

```js run
alert( 4 ** (1/2) ); // 2 (potencia de 1/2 es lo mismo que raíz cuadrada, eso es matemáticas)
alert( 8 ** (1/3) ); // 2 (potencia de 1/3 es lo mismo que raíz cúbica)
```


## Concatenación de cadenas con el binario +

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

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

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.

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:
Vieron, no importa si el primer operando es una cadena o el segundo.

Aquí hay un ejemplo algo más complejo:

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

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.
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`.

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.

Por ejemplo, resta y división:

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

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.

¿Qué pasa si queremos sumarlos?

El operador binario suma los agregaría como cadenas:

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

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.

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):
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):

| Precedencia| Nombre | Signo |
|------------|------|------|
| ... | ... | ... |
| 16 | suma unaria | `+` |
| 16 | negación unaria | `-` |
| 16 | exponenciación | `**` |
| 14 | multiplicación | `*` |
| 14 | division | `/` |
| 13 | suma | `+` |
Expand All @@ -164,24 +210,11 @@ let x = 2 * 2 + 1;
alert( x ); // 5
```

Es posible encadenar asignaciones:
### Asignación = devuelve un valor

```js run
let a, b, c;

*!*
a = b = c = 2 + 2;
*/!*

alert( a ); // 4
alert( b ); // 4
alert( c ); // 4
```

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.
El hecho de que `=` sea un operador, no un construcción "mágica" del lenguaje, tiene un implicanción interesante.

````smart header="El operador asignación `\"=\"` devuelve un valor"
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.
La mayoría de los operadores en JavaScript devuelven un valor. Esto es obvio para `+` y `-`, pero también es cierto para `=`.

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

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

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.

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.
````
Código gracioso, ¿no? Deberíamos entender cómo funciona, porque a veces lo vemos en las bibliotecas de JavaScript.

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

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

El resultado de `a % b` es el resto de la división entera de `a` por `b`.

Por ejemplo:
Otra característica interesante es la habilidad para encadenar asignaciones:

```js run
alert( 5 % 2 ); // 1 es un resto de 5 dividido por 2
alert( 8 % 3 ); // 2 es un resto de 8 dividido por 3
alert( 6 % 3 ); // 0 es un resto de 6 dividido por 3
let a, b, c;

*!*
a = b = c = 2 + 2;
*/!*

alert( a ); // 4
alert( b ); // 4
alert( c ); // 4
```

## Exponenciación **
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.

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

Para un número natural `b`, el resultado de `a ** b` es `a` multiplicado por sí mismos `b` veces.
```js
c = 2 + 2;
b = c;
a = c;
```
Es más fácil de leer, especialmente cuando se hace de un vistazo.

## Modificar en el lugar

A menudo necesitamos aplicar un operador a una variable y guardar el nuevo resultado en esa misma variable.

Por ejemplo:

```js
let n = 2;
n = n + 5;
n = n * 2;
```

Esta notación puede ser acortada utilizando los operadores `+=` y `*=`:

```js run
alert( 2 ** 2 ); // 4 (2 * 2)
alert( 2 ** 3 ); // 8 (2 * 2 * 2)
alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2)
let n = 2;
n += 5; // ahora n = 7 (lo mismo que n = n + 5)
n *= 2; // ahora n = 14 (lo mismo que n = n * 2)

alert( n ); // 14
```

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

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

```js run
alert( 4 ** (1/2) ); // 2 (potencia de 1/2 es lo mismo que raíz cuadrada, eso es matemáticas)
alert( 8 ** (1/3) ); // 2 (potencia de 1/3 es lo mismo que raíz cúbica)
let n = 2;

n *= 3 + 5;

alert( n ); // 16 (lado derecho evaluado primero, lo mismo que n *= 8)
```

## Incremento/decremento
Expand Down Expand Up @@ -372,40 +430,6 @@ La lista de operadores:

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.

## Modificar en el lugar

A menudo necesitamos aplicar un operador a una variable y guardar el nuevo resultado en esa misma variable.

Por ejemplo:

```js
let n = 2;
n = n + 5;
n = n * 2;
```

Esta notación puede ser acortada utilizando los operadores `+=` y `*=`:

```js run
let n = 2;
n += 5; // ahora n = 7 (lo mismo que n = n + 5)
n *= 2; // ahora n = 14 (lo mismo que n = n * 2)

alert( n ); // 14
```

Los operadores cortos "modifica y asigna" existen para todos los operadores aritméticos y de nivel bit: `/=`, `-=`, etcétera.

Tales operadores tienen la misma precedencia que la asignación normal, por lo tanto se ejecutan después de otros cálculos:

```js run
let n = 2;

n *= 3 + 5;

alert( n ); // 16 (lado derecho evaluado primero, lo mismo que n *= 8)
```

## Coma

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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ Algunas de las razones:
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"`.
4. Los valores `null` y `undefined` son iguales entre sí solamente.
5. La igualdad estricta es estricta. Diferentes tipos de ambos lados conducen a false.
6. Similar a (4).
6. Similar a (4), `null` solamente es igual a `undefined`.
7. Igualdad estricta de diferentes tipos.
4 changes: 3 additions & 1 deletion 1-js/02-first-steps/09-comparison/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,9 @@ El algoritmo para comparar dos cadenas es simple:
4. Repita hasta el final de cada cadena.
5. Si ambas cadenas tienen la misma longitud, entonces son iguales. De lo contrario, la cadena más larga es mayor.

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:
En los ejemplos anteriores, la comparación `'Z' > 'A'` llega a un resultado en el primer paso.

La segunda comparación `"Glow"` y `"Glee"` necesitan más pasos, se comparan carácter por carácter:

1. `G` es igual que `G`.
2. `l` es igual que `l`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ importance: 3

# Comprueba el rango por dentro

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

"Inclusivamente" significa que `age` puede llegar a ser uno de los extremos, `14` o `90`.
"Inclusive" significa que `age` puede llegar a ser uno de los extremos, `14` o `90`.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ importance: 3

# Comprueba el rango por fuera

Escribe una condición `if` para comprobar que `age` NO está entre 14 y 90 inclusivemente.
Escribe una condición `if` para comprobar que `age` NO está entre 14 y 90 inclusive.

Crea dos variantes: la primera usando NOT `!`, y la segunda -- sin usarlo.
Crea dos variantes: la primera usando NOT `!`, y la segunda sin usarlo.
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,15 @@ if (userName == "Admin") {

let pass = prompt("¿Contraseña?", "");

if (pass == "TheMaster") {
if (pass === "TheMaster") {
alert( "Bienvenido!" );
} else if (pass == "" || pass == null) {
} else if (pass === "" || pass === null) {
alert( "Cancelado." );
} else {
alert( "Contraseña incorrecta" );
}

} else if (userName == "" || userName == null) {
} else if (userName === "" || userName === null) {
alert( "Canceledo" );
} else {
alert( "No te conozco" );
Expand Down
Loading