Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
225 commits
Select commit Hold shift + click to select a range
9bae8fd
Typos
peachesontour Sep 21, 2020
2b8354b
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
7c12746
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
74526b4
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
e0db058
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
ed497e7
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
2be35c9
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
443af20
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
f25dca8
Update 7-animation/2-css-animations/article.md
peachesontour Sep 22, 2020
6c37da4
Update 7-animation/2-css-animations/article.md
peachesontour Sep 23, 2020
5168eaa
Update 7-animation/2-css-animations/article.md
peachesontour Sep 23, 2020
689392e
Fix my typos in 1.5.5
vsemozhetbyt Oct 11, 2020
104bee3
Clarify a bit ambiguous wording in 1.5.7
vsemozhetbyt Oct 12, 2020
7faa49e
Symmetrize Map and Set summaries
vsemozhetbyt Oct 12, 2020
154bf02
Fix possible typo in 1.5.7 task
vsemozhetbyt Oct 12, 2020
0be77b0
Clarify some things in 1.5.12
vsemozhetbyt Oct 15, 2020
6df0982
FIX: minor typo error
leviding Nov 13, 2020
806e371
Update article.md
leviding Nov 13, 2020
fb43e39
Update article.md
leviding Nov 13, 2020
d977582
Update article.md
leviding Nov 13, 2020
ee2bc1c
Update article.md
leviding Nov 13, 2020
26d449c
Minor grammar alteration.
joneskj55 Nov 13, 2020
7a67741
Update article.md
leviding Nov 15, 2020
75e10e2
Update article.md
leviding Nov 15, 2020
cb62d6d
Update article.md
leviding Nov 15, 2020
a39f437
Update article.md
leviding Nov 15, 2020
5b63e81
Update article.md
leviding Nov 15, 2020
358c389
Update article.md
leviding Nov 15, 2020
80eb70f
Update article.md
leviding Nov 15, 2020
adf83c6
Update article.md
leviding Nov 15, 2020
9b3b10f
Update README.md
leviding Nov 16, 2020
6db57d9
Update article.md
leviding Nov 16, 2020
891495c
Promise.any
lumosmind Nov 17, 2020
15780b3
Update task.md
leviding Nov 17, 2020
a81bb4a
Fix typo in 2.2.5 (Dispatching custom events)
vsemozhetbyt Nov 17, 2020
149f63e
FIX: minor typo error, missing "alert( "
leviding Nov 18, 2020
1ba96d4
missssing
joaquinelio Nov 18, 2020
5aeb8fe
Update article.md
leviding Nov 18, 2020
ee8f6d1
Update article.md
joaquinelio Nov 18, 2020
3709b0b
Update article.md
leviding Nov 18, 2020
cd052d1
Update article.md
leviding Nov 18, 2020
0437d57
Fix typo in 2.3.3 (Moving the mouse...)
vsemozhetbyt Nov 18, 2020
5e9937a
Rephrase sentence.
odsantos Nov 18, 2020
0b401e6
Updated article.md
patrikbego Nov 19, 2020
565fef8
Include missing fileServer
manjufy Nov 19, 2020
fa4b19e
Rephrased for better clarity.
patrikbego Nov 19, 2020
1feed09
Rephrased for clarity.
patrikbego Nov 19, 2020
e289aba
Update 1-js/11-async/05-promise-api/article.md
lumosmind Nov 20, 2020
bd44850
fix nested markdown
joaquinelio Nov 24, 2020
1e590d6
Merge pull request #2310 from joaquinelio/patch-3
iliakan Nov 24, 2020
58136cb
Update article.md
paroche Nov 24, 2020
dcb3758
Merge pull request #2311 from javascript-tutorial/paroche-patch-20
paroche Nov 24, 2020
865c329
Further minor changes to punctuation and wording
paroche Nov 24, 2020
ac92672
And a little more
paroche Nov 24, 2020
54378cb
Correct subhead in 3.1 (Popups and window methods)
vsemozhetbyt Nov 24, 2020
246c6c4
Merge branch 'master' into patch-1
iliakan Nov 24, 2020
501adfd
Merge pull request #2187 from vsemozhetbyt/patch-1
iliakan Nov 24, 2020
c066fea
Merge pull request #2191 from vsemozhetbyt/patch-2
iliakan Nov 24, 2020
50a20d1
Merge pull request #2298 from manjufy/patch-1
iliakan Nov 24, 2020
f7b2208
Fix typo in 2.3.1 (Mouse events)
vsemozhetbyt Nov 17, 2020
b7a7e68
Fix typo in 2.99.2 (Selection and Range)
vsemozhetbyt Nov 23, 2020
a9d2363
Merge pull request #2296 from odsantos/update-strings
iliakan Nov 24, 2020
dd02130
Merge pull request #2295 from vsemozhetbyt/patch-10
iliakan Nov 24, 2020
aacdf01
Merge pull request #2192 from vsemozhetbyt/patch-3
iliakan Nov 24, 2020
7211729
Merge pull request #2193 from vsemozhetbyt/patch-4
iliakan Nov 24, 2020
445d2c8
minor fixes
iliakan Nov 24, 2020
79710c4
Update article.md
patrikbego Nov 24, 2020
50c3e3d
Merge pull request #2199 from vsemozhetbyt/patch-6
iliakan Nov 25, 2020
9700f82
Merge pull request #2283 from leviding/patch-31
iliakan Nov 25, 2020
47ca608
Update README.md
iliakan Nov 25, 2020
31d9441
Update README.md
iliakan Nov 25, 2020
865174e
Merge pull request #2285 from joneskj55/patch-1
iliakan Nov 25, 2020
b8fb9d4
Merge pull request #2300 from patrikbego/patch-1
iliakan Nov 25, 2020
a2494a7
Merge pull request #2290 from vsemozhetbyt/patch-7
iliakan Nov 25, 2020
fbe2050
Merge pull request #2291 from vsemozhetbyt/patch-8
iliakan Nov 25, 2020
ba277aa
Merge pull request #2292 from joaquinelio/patch-2
iliakan Nov 25, 2020
0e79e06
example is fixed and summary is extended
lumosmind Nov 25, 2020
5f04058
Summary section is fixed
lumosmind Nov 25, 2020
2554d3d
Merge pull request #2293 from leviding/patch-33
iliakan Nov 25, 2020
b73c2a4
typo
lumosmind Nov 25, 2020
947afdd
Merge pull request #2297 from patrikbego/patch-2
iliakan Nov 25, 2020
36c0702
Merge pull request #2309 from vsemozhetbyt/patch-11
iliakan Nov 25, 2020
b3974b3
Merge pull request #2313 from vsemozhetbyt/patch-12
iliakan Nov 25, 2020
193e174
Fix possible typos in 4.1 (ArrayBuffer, binary arrays)
vsemozhetbyt Nov 25, 2020
a0b0d43
Merge pull request #2315 from vsemozhetbyt/patch-1
iliakan Nov 25, 2020
0eef950
minor fixes
iliakan Nov 25, 2020
0ac7894
minor fixes
iliakan Nov 25, 2020
fee6657
minor fixes
iliakan Nov 25, 2020
6ec4c4f
minor fixes
iliakan Nov 25, 2020
91da65d
Fix typos in 4.3 (Blob)
vsemozhetbyt Nov 25, 2020
2793f33
Fix typo in 5.2 (FormData)
vsemozhetbyt Nov 26, 2020
ae6f990
Add missing parenthesis in 5.6 (Fetch API)
vsemozhetbyt Nov 27, 2020
b79964a
Fix typos in 5.8 (XMLHttpRequest)
vsemozhetbyt Nov 28, 2020
513d36e
Expand a note in 5.8 (XMLHttpRequest)
vsemozhetbyt Nov 28, 2020
0f0a0c5
Replace deprecated property in 5.9 (Resumable file upload)
vsemozhetbyt Nov 28, 2020
c828fe3
Fix typo in 5.11 (WebSocket)
vsemozhetbyt Nov 29, 2020
e558805
fixes #2326
iliakan Nov 29, 2020
d2ebb42
Merge pull request #2288 from lumosmind/patch-54
iliakan Nov 29, 2020
b852cfe
Update article.md
joaquinelio Nov 29, 2020
ebd774d
Update 7-animation/2-css-animations/article.md
iliakan Nov 29, 2020
00f138c
Merge pull request #2140 from peachesontour/patch-14
iliakan Nov 29, 2020
6f7d9cf
minor fixes
iliakan Nov 29, 2020
8e6ace0
Merge pull request #2325 from vsemozhetbyt/patch-7
iliakan Nov 29, 2020
59c5400
Merge pull request #2324 from vsemozhetbyt/p5.9
iliakan Nov 29, 2020
277374f
Merge pull request #2323 from vsemozhetbyt/patch-6
iliakan Nov 29, 2020
4697b7b
Merge pull request #2322 from vsemozhetbyt/patch-5
iliakan Nov 29, 2020
8b98721
Merge pull request #2321 from vsemozhetbyt/patch-4
iliakan Nov 29, 2020
d05bbe0
Merge pull request #2320 from vsemozhetbyt/patch-3
iliakan Nov 29, 2020
574dd84
closes #2319
iliakan Nov 29, 2020
361c702
Merge pull request #2316 from vsemozhetbyt/patch-2
iliakan Nov 29, 2020
9065fd3
Merge pull request #2302 from patrikbego/patch-3
iliakan Nov 29, 2020
e1a3f63
Merge pull request #2327 from joaquinelio/patch-4
iliakan Nov 29, 2020
b1bee55
Fix typo in 1.99.1 (Proxy and Reflect)
vsemozhetbyt Nov 29, 2020
34e711c
Fix typo, add info in 1.11.5 (Promise API)
vsemozhetbyt Nov 29, 2020
5aebb89
Fix typos in 1.5.8 (WeakMap and WeakSet)
vsemozhetbyt Nov 29, 2020
00d2f33
Fix typo and ambiguity in 5.12 (Server Sent Events)
vsemozhetbyt Nov 30, 2020
79f3caf
Fix for issue #2314
joneskj55 Dec 1, 2020
6abb98b
Fix possible typos in 6.1 (Cookies, document.cookie)
vsemozhetbyt Dec 1, 2020
7ffb6ce
fix typo "colector" => "collector"
FantasqueX Dec 2, 2020
fd85fc5
Fix possible typos in 6.3 (IndexedDB)
vsemozhetbyt Dec 2, 2020
5c0ea29
Update article.md
Heikrana Dec 3, 2020
21dc138
Fix typo in 7.1 (Bezier curve)
vsemozhetbyt Dec 3, 2020
634e066
Update 1-js/02-first-steps/08-operators/article.md
Heikrana Dec 3, 2020
3d86152
Update article.md
Heikrana Dec 3, 2020
0928178
Fix typo in 7.2 (CSS-animations)
vsemozhetbyt Dec 3, 2020
d4c23dc
Fix bug: Clock can't be stopped when 'Start' clicked while running
PGlivicky Dec 4, 2020
6118cc0
Add a missing bracket in the solution description
PGlivicky Dec 4, 2020
268159c
Fix typo.
odsantos Dec 4, 2020
44f4795
selection
iliakan Dec 4, 2020
e112b8b
Merge pull request #2349 from odsantos/fix-arrays-typos
iliakan Dec 5, 2020
f274f4d
Merge pull request #2347 from PGlivicky/fix-clock-setinterval-solution
iliakan Dec 5, 2020
b65c625
Merge pull request #2343 from vsemozhetbyt/patch-11
iliakan Dec 5, 2020
ff40f49
Merge pull request #2342 from vsemozhetbyt/patch-10
iliakan Dec 5, 2020
3d4a6e9
Fix typos in 7.3 (JavaScript animations)
vsemozhetbyt Dec 5, 2020
441e720
Fix typo in 6.2 (LocalStorage, sessionStorage)
vsemozhetbyt Dec 1, 2020
9fab25a
Merge pull request #2329 from vsemozhetbyt/patch-2
iliakan Dec 5, 2020
75302a6
Merge pull request #2330 from vsemozhetbyt/patch-3
iliakan Dec 5, 2020
386870d
minor fixes
iliakan Dec 5, 2020
38407b1
Merge pull request #2351 from vsemozhetbyt/7.3
iliakan Dec 5, 2020
b563d4d
Merge pull request #2331 from vsemozhetbyt/patch-4
iliakan Dec 5, 2020
528b7c5
Merge pull request #2332 from vsemozhetbyt/patch-5
iliakan Dec 5, 2020
762162f
Merge pull request #2334 from joneskj55/patch-1
iliakan Dec 5, 2020
ad1df4e
Merge pull request #2336 from vsemozhetbyt/patch-6
iliakan Dec 5, 2020
59acd01
Merge pull request #2337 from vsemozhetbyt/patch-7
iliakan Dec 5, 2020
0db83b2
Merge branch 'master' into patch-1
iliakan Dec 5, 2020
d319026
Merge pull request #2338 from FantasqueX/patch-1
iliakan Dec 5, 2020
2741d5e
Merge pull request #2340 from vsemozhetbyt/patch-8
iliakan Dec 5, 2020
5ce6ce9
minor fixes
iliakan Dec 5, 2020
6d9ab12
fixes #2333
iliakan Dec 5, 2020
75a56da
fixes #2318
iliakan Dec 5, 2020
a964025
closes #2317
iliakan Dec 5, 2020
08cc593
minor fixes
iliakan Dec 5, 2020
6daaaa2
Update article.md
iliakan Dec 5, 2020
63d0f05
closes #2244
iliakan Dec 5, 2020
ec4dcb2
closes #2353
iliakan Dec 5, 2020
0585eda
closes #2248
iliakan Dec 5, 2020
211e209
closes #2225
iliakan Dec 5, 2020
b55c226
Fix typo in 8.2 (Custom elements)
vsemozhetbyt Dec 5, 2020
e8d29cb
closes #2173
iliakan Dec 6, 2020
bb5c89a
Merge pull request #2354 from vsemozhetbyt/patch-1
iliakan Dec 6, 2020
e194ec2
Fix typo in 8.3 (Shadow DOM)
vsemozhetbyt Dec 6, 2020
433ef6d
Merge pull request #2355 from vsemozhetbyt/patch-1
iliakan Dec 6, 2020
eb81e52
Fix possible typos in 1.3.6 (Polyfills and transpilers)
vsemozhetbyt Dec 6, 2020
f30b4f2
Merge pull request #2356 from vsemozhetbyt/patch-1
iliakan Dec 6, 2020
68dfa95
minor fixes
iliakan Dec 6, 2020
59a579f
Sync examples from 2 commits in 8.5 (Shadow DOM slots...)
vsemozhetbyt Dec 6, 2020
c56e6a5
Merge pull request #2357 from vsemozhetbyt/patch-1
iliakan Dec 6, 2020
76b42c3
Fix typo in 8.5 (Shadow DOM slots...)
vsemozhetbyt Dec 6, 2020
1e4b9e4
Merge pull request #2359 from vsemozhetbyt/patch-1
iliakan Dec 7, 2020
0936245
Merge pull request #2341 from vsoni101/patch-1
iliakan Dec 7, 2020
79c9513
closes #2358
iliakan Dec 7, 2020
adab443
Fixed small typo
RapTho Dec 7, 2020
5be2c04
Fix typo in 9.1 (Patterns and flags)
vsemozhetbyt Dec 7, 2020
e87f130
Merge pull request #2362 from vsemozhetbyt/patch-1
iliakan Dec 7, 2020
2cf95d8
Fix some issues in 9.2 (Character classes)
vsemozhetbyt Dec 7, 2020
7c73f64
Replace unicode with Unicode all over the book
vsemozhetbyt Dec 7, 2020
633db6f
Merge pull request #2364 from vsemozhetbyt/unicode
iliakan Dec 7, 2020
907e6c8
Fix "polyfills" typo
odsantos Dec 7, 2020
6a61c04
Fix confusing wording in 9.6 (Word boundary: \b)
vsemozhetbyt Dec 7, 2020
935ed85
Fix typo in 9.7 (Escaping, special characters)
vsemozhetbyt Dec 7, 2020
4a3d842
Fix typo in 9.8 task solution (Sets and ranges [...])
vsemozhetbyt Dec 8, 2020
b19312e
Update support note in 9.8 (Sets and ranges [...])
vsemozhetbyt Dec 8, 2020
6567009
Fix typos in 9.10 (Greedy and lazy quantifiers)
vsemozhetbyt Dec 8, 2020
f2f6500
Fix typos in 9.11 (Capturing groups)
vsemozhetbyt Dec 9, 2020
276f48d
Fix typos in 9.13 (Alternation (OR) |)
vsemozhetbyt Dec 9, 2020
6fc5b2c
Correct example in 9.14 (Lookahead and lookbehind)
vsemozhetbyt Dec 9, 2020
20916d9
Make solution in 9.14 safer
vsemozhetbyt Dec 9, 2020
ec15bd2
Fix typo in 1.99.1 (Proxy and Reflect)
jasonvitagendev Dec 10, 2020
e5d1c02
Fix typo, clarify wording in 9.15 (Catastrophic backtracking)
vsemozhetbyt Dec 10, 2020
4512a02
Update support note in 9.15 (Catastrophic backtracking)
vsemozhetbyt Dec 10, 2020
04ce728
Fix typo in 9.16 (Sticky flag "y"...)
vsemozhetbyt Dec 10, 2020
a8c22e9
Fix typo in 9.17 (Methods of RegExp and String)
vsemozhetbyt Dec 10, 2020
eb5e7da
Fixed typo
RapTho Dec 13, 2020
ba5ebbc
Merge pull request #2363 from vsemozhetbyt/patch-2
iliakan Dec 13, 2020
94c829e
Merge pull request #2384 from RapTho/master
iliakan Dec 13, 2020
92cdba0
Merge pull request #2383 from vsemozhetbyt/patch-12
iliakan Dec 13, 2020
16fda1b
Merge pull request #2381 from vsemozhetbyt/patch-11
iliakan Dec 13, 2020
19d1e33
Merge pull request #2379 from vsemozhetbyt/patch-10
iliakan Dec 13, 2020
27c3030
minor fixes
iliakan Dec 13, 2020
f716a91
minor fixes
iliakan Dec 13, 2020
4e1ab89
Merge pull request #2378 from vsemozhetbyt/patch-9
iliakan Dec 13, 2020
6fee9f0
Merge pull request #2377 from jasonvitagendev/master
iliakan Dec 13, 2020
c59c9e8
Merge pull request #2376 from vsemozhetbyt/patch-8
iliakan Dec 13, 2020
093dfe4
Merge pull request #2375 from vsemozhetbyt/patch-7
iliakan Dec 13, 2020
aae708d
Merge pull request #2374 from vsemozhetbyt/patch-6
iliakan Dec 13, 2020
e1cb0f8
Merge pull request #2373 from vsemozhetbyt/9.11
iliakan Dec 13, 2020
a1736bd
Merge pull request #2372 from vsemozhetbyt/9.10
iliakan Dec 13, 2020
985dedb
Merge pull request #2371 from vsemozhetbyt/patch-5
iliakan Dec 13, 2020
76f0732
Merge pull request #2370 from vsemozhetbyt/patch-4
iliakan Dec 13, 2020
0543fee
Merge pull request #2369 from vsemozhetbyt/patch-3
iliakan Dec 13, 2020
fd2e83c
Merge pull request #2368 from vsemozhetbyt/patch-1
iliakan Dec 13, 2020
9b68941
Merge pull request #2366 from odsantos/fix-polyfills-typo
iliakan Dec 13, 2020
8bc2e92
minor fixes
iliakan Dec 13, 2020
c275ba4
closes #2382
iliakan Dec 13, 2020
37e51e0
Typo "in any *of* language"
heypano Dec 13, 2020
23e85b3
Merge pull request #2385 from heypano/patch-1
iliakan Dec 13, 2020
2b79ab1
minor fixes
iliakan Dec 14, 2020
a43c18f
minor fixes
iliakan Dec 15, 2020
10fecd9
Merge 'enstream/master' into susy201217
joaquinelio Dec 21, 2020
427ee38
Update article.md
joaquinelio Dec 21, 2020
f96e7b2
Update article.md
joaquinelio Dec 21, 2020
a2b1db7
Update article.md
joaquinelio Dec 21, 2020
017aade
Update article.md
joaquinelio Dec 21, 2020
019939b
Update article.md
joaquinelio Dec 21, 2020
6420104
Apply suggestions from code review vplantinax
joaquinelio Dec 24, 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
4 changes: 2 additions & 2 deletions 1-js/01-getting-started/1-intro/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,13 @@ Las herramientas modernas hacen la conversión (Transpilation) muy rápida y tra

Ejemplos de tales lenguajes:

- [CoffeeScript](http://coffeescript.org/) Es una "sintaxis azucarada" [syntactic sugar](https://es.wikipedia.org/wiki/Az%C3%BAcar_sint%C3%A1ctico) para JavaScript. Introduce una sintaxis corta, permitiéndonos escribir un código mas claro y preciso. Usualmente desarrolladores de Ruby prefieren este lenguaje.
- [CoffeeScript](http://coffeescript.org/) Es una "sintaxis azucarada" para JavaScript. Introduce una sintaxis corta, permitiéndonos escribir un código mas claro y preciso. Usualmente desarrolladores de Ruby prefieren este lenguaje.
- [TypeScript](http://www.typescriptlang.org/) se concentra en agregar "tipado estricto" ("strict data typing") para simplificar el desarrollo y soporte de sistemas complejos. Es desarrollado por Microsoft.
-[FLow](https://flow.org/) también agrega la escritura de datos, pero de una manera diferente. Desarrollado por Facebook.
- [Dart](https://www.dartlang.org/) es un lenguaje independiente que tiene su propio motor que se ejecuta en entornos que no son de navegador (como aplicaciones móviles), pero que también se puede convertir/transpilar a JavaScript. Desarrollado por Google.
- [Brython](https://brython.info/) es un transpilador de Python a JavaScript que permite escribir aplicaciones en Python puro sin JavaScript.

Hay mas. Por supuesto, incluso si nosotros usamos alguno de estos lenguajes, deberíamos conocer también JavaScript para realmente entender qué estamos haciendo.
Hay más. Por supuesto, incluso si nosotros usamos alguno de estos lenguajes, deberíamos conocer también JavaScript para realmente entender qué estamos haciendo.

## Resumen

Expand Down
5 changes: 5 additions & 0 deletions 1-js/02-first-steps/08-operators/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ alert(2 + 2 + '1' ); // "41" y no "221"

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

```js run
alert('1' + 2 + 2); // "122", no es "14"
```
Aquí el primer operando es una cadena, el compilador trata los otros dos operandos como cadenas también. El `2` es concatenado a `'1'`, entonces es como `'1' + 2 = "12"` y `"12" + 2 = "122"`.

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
8 changes: 4 additions & 4 deletions 1-js/04-object-basics/02-object-copy/article.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Referencias de objetos y copia

Una de las diferencias fundamentales entre objetos y primitivos es que los objetos son almacenados y copiados "por referencia", en cambio los primitivos: strings, number, boolean; son asignados y copiados "como un valor completo".
Una de las diferencias fundamentales entre objetos y primitivos es que los objetos son almacenados y copiados "por referencia", en cambio los primitivos: strings, number, boolean, etc.; son asignados y copiados "como un valor completo".

Esto es fácil de entender si miramos un poco "bajo cubierta" de lo que pasa cuando copiamos por valor.

Expand Down Expand Up @@ -37,13 +37,13 @@ Y así es como se almacena en la memoria:

El objeto es almacenado en algún lugar de la memoria (a la derecha de la imagen), mientras que la variable `user` (a la izquierda) tiene una "referencia" a él.

Podemos pensar de una variable objeto, como `user`, como una hoja de papel con su dirección.
Podemos pensar de una variable objeto, como `user`, como una hoja de papel con la dirección del objeto en él.

Cuando ejecutamos acciones con el objeto, por ejemplo tomar una propiedad `user.name`, el motor JavaScript busca aquella dirección y ejecuta la operación en el objeto mismo.

Ahora, por qué esto es importante.

**Cuando una variable de objeto es copiada -- la referencia es copiada, el objeto no es duplicado.**
**Cuando una variable de objeto es copiada, se copia solo la referencia. El objeto no es duplicado.**

Por ejemplo:

Expand Down Expand Up @@ -73,7 +73,7 @@ admin.name = 'Pete'; // cambiado por la referencia "admin"
alert(*!*user.name*/!*); // 'Pete', los cambios se ven desde la referencia "user"
```

Es como si tuviéramos un gabinete con dos llaves y usáramos una de ellas (`admin`) para acceder a él. Si más tarde usamos la llave (`user`), podemos ver los cambios.
Es como si tuviéramos un gabinete con dos llaves y usáramos una de ellas (`admin`) para acceder a él y hacer cambios. Si más tarde usamos la llave (`user`), estaríamos abriendo el mismo gabinete y accediendo al contenido cambiado.

## Comparación por referencia

Expand Down
72 changes: 54 additions & 18 deletions 1-js/04-object-basics/07-optional-chaining/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,21 @@ El encadenamiento opcional `?.` es una forma a prueba de errores para acceder a

Si acaba de comenzar a leer el tutorial y aprender JavaScript, quizás el problema aún no lo haya tocado, pero es bastante común.

Por ejemplo, algunos de nuestros usuarios tienen direcciones, pero pocos no las proporcionaron. Entonces no podemos leer con seguridad `user.address.street`:
Como ejemplo, digamos que tenemos objetos `user` que contienen información de nuestros usuarios.

En tal cao, cuando intentamos obtener `user.address.street`, obtendremos un error:
La mayoría de nuestros usuarios tienen la dirección en la propiedad `user.address`, con la calle en `user.address.street`, pero algunos no la proporcionaron.

En tal caso, cuando intentamos obtener `user.address.street`en un usuario sin dirección obtendremos un error:

```js run
let user = {}; // usuario sin propiedad "address"

alert(user.address.street); // Error!
```

Este es el resultado esperado, JavaScript funciona así, pero en muchos casos prácticos preferiríamos obtener `undefined` en lugar del error (sin "street").
Este es el resultado esperado. JavaScript funciona así, como `user.address` es `undefined`, el intento de obtener `user.address.street` falla dando un error.

En muchos casos prácticos preferiríamos obtener `undefined` en lugar del error (dando a entender "sin calle")

...Y otro ejemplo. En el desarrollo web, necesitamos obtener información sobre un elemento en la página, pero a veces este no existe:

Expand All @@ -28,33 +32,67 @@ Este es el resultado esperado, JavaScript funciona así, pero en muchos casos pr
let html = document.querySelector('.my-element').innerHTML;
```

Antes de que apareciera `?.` en el lenguaje, se usaba el operador `&&` para solucionarlo.
Una vez más, si el elemento no existe, obtendremos un error al acceder al `.innerHTML` de `null`. Y en algunos casos, cuando la ausencia del elemento es normal, quisiéramos evitar el error y simplemente aceptar `html = null` como resultado.

Por ejemplo:
¿Cómo podemos hacer esto?

```js run
La solución obvia sería chequear el valor usando `if` o el operador condicional `?` antes de usar la propiedad:

```js
let user = {};

alert(user.address ? user.address.street : undefined);
```

Esto funciona, no hay error... Pero es bastante poco elegante. Como puedes ver, `"user.address"` aparece dos veces en el código. En propiedades anidadas más profundamente, esto se vuelve un problema porque se requerirán más repeticiones.

Ejemplo: Tratemos de obtener `user.address.street.name`.

Necesitamos chequear `user.address` y `user.address.street`:

```js
let user = {}; // El usuario no tiene dirección

alert( user.address && user.address.street && user.address.street.name ); // undefined (no error)
alert(user.address ? user.address.street ? user.address.street.name : null : null);
```

Poniendo AND en el camino completo a la propiedad asegura que todos los componentes existen (si no, la evaluación se detiene), pero es engorroso de escribir.
Esto es horrible, podemos tener problemas para siquiera entender tal código.

Ni lo intentes, hay una mejor manera de escribirlo usando el operador `&&`:

```js run
let user = {}; // usuario sin dirección

alert( user.address && user.address.street && user.address.street.name ); // undefined (sin error)
```

Poniendo AND en el camino completo a la propiedad asegura que todos los componentes existen (si no, la evaluación se detiene), pero no es lo ideal.

Como puedes ver, los nombres de propiedad aún están duplicados en el código. Por ejemplo en el código de arriba `user.address` aparece tres veces.

Es por ello que el encadenamiento opcional `?.` fue agregado al lenguaje. ¡Para resolver este problema de una vez por todas!

## Encadenamiento opcional

El encadenamiento opcional `?.` detiene la evaluación y devuelve` undefined` si la parte anterior a `?.` es` undefined` o `null`.
El encadenamiento opcional `?.` detiene la evaluación si la parte anterior a `?.` es ` undefined` o `null` y devuelve esa parte.

**De aquí en adelante en este artículo, por brevedad, diremos que algo "existe" si no es `null` o `undefined`.**

Aquí está la forma segura de acceder a `user.address.street`:
En otras palabras, `value?.prop`:
- es lo mismo que `value.prop` si `value` existe,
- de otro modo (cuando `value` es `undefined/null`) devuelve `undefined`.

Aquí está la forma segura de acceder a `user.address.street` usando `?.`:

```js run
let user = {}; // El usuario no tiene dirección

alert( user?.address?.street ); // undefined (no hay error)
```

Leer la dirección con `user? .Address` funciona incluso si el objeto `user` no existe:
El código es corto y claro, no hay duplicación en absoluto

Leer la dirección con `user?.Address` funciona incluso si el objeto `user` no existe:

```js run
let user = null;
Expand All @@ -65,14 +103,12 @@ alert( user?.address.street ); // undefined

Tenga en cuenta: la sintaxis `?.` hace opcional el valor delante de él, pero no más allá.

En el ejemplo anterior, `user?.` permite que solo `user` sea `null/undefined`.

Por otro lado, si `user` existe, entonces debe tener la propiedad `user.address`, de lo contrario `user?.Address.street` da un error en el segundo punto.
Por ejemplo en `user?.address.street.name` el `?.` permite a `user` ser `null/undefined`, pero es todo lo que hace. El resto de las propiedades son accedidas de la manera normal. Si queremos que algunas de ellas sean opcionales, necesitamos reemplazar más `.` con `?.`.

```warn header="No abuses del encadenamiento opcional"
Deberíamos usar `?.` solo donde está bien que algo no exista.

Por ejemplo, si de acuerdo con nuestra lógica de codificación, el objeto `user` debe estar allí, pero `address` es opcional, entonces `user.address?.Street` sería mejor.
Por ejemplo, si de acuerdo con nuestra lógica de codificación, el objeto `user` debe estar allí, pero `address` es opcional, entonces deberíamos escribir `user.address?.street` y no `user?.address?.street`.

Entonces, si `user` no está definido debido a un error, lo sabremos y lo arreglaremos. De lo contrario, los errores de codificación pueden silenciarse donde no sea apropiado y volverse más difíciles de depurar.
```
Expand All @@ -84,7 +120,7 @@ Si no hay una variable `user` declarada, entonces `user?.anything` provocará un
// ReferenceError: user no está definido
user?.address;
```
Debe haber `let/const/var user`. El encadenamiento opcional solo funciona para variables declaradas.
La variable debe ser declarada (con `let/const/var user` o como parámetro de función). El encadenamiento opcional solo funciona para variables declaradas.
````

## Short-circuiting (Cortocircuitos)
Expand All @@ -108,7 +144,7 @@ alert(x); // 0, el valor no se incrementa

El encadenamiento opcional `?.` no es un operador, sino una construcción de sintaxis especial, que también funciona con funciones y corchetes.

Por ejemplo, `?.()` Se usa para llamar a una función que puede no existir.
Por ejemplo, `?.()` se usa para llamar a una función que puede no existir.

En el siguiente código, algunos de nuestros usuarios tienen el método `admin`, y otros no:

Expand All @@ -126,7 +162,7 @@ userAdmin.admin?.(); // I am admin
*/!*

*!*
userGuest.admin?.(); // nothing (no such method)
userGuest.admin?.(); // nada (no existe tal método)
*/!*
```

Expand Down
16 changes: 8 additions & 8 deletions 1-js/05-data-types/03-string/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ let guestList = "Invitados: // Error: Unexpected token ILLEGAL

Las comillas simples y dobles provienen de la creación de lenguaje en tiempos ancestrales, cuando la necesidad de múltiples líneas no era tomada en cuenta. Los backticks aparecieron mucho después y por ende son más versátiles.

Los backticks además nos permiten especificar una "función de plantilla" antes del primer backtick. La sintaxis es: <code>func&#96;string&#96;</code>. La función `func` es llamada automáticamente, recibe el string y la expresión insertada y los puede procesar. Puedes leer más sobre esto en [docs](mdn:/JavaScript/Reference/Template_literals#Tagged_template_literals). Eso se llama "plantillas etiquetadas". Esta característica hace que sea más fácil rodear strings en plantillas personalizadas u otra funcionalidad, pero es raramente usada.
Los backticks además nos permiten especificar una "función de plantilla" antes del primer backtick. La sintaxis es: <code>func&#96;string&#96;</code>. La función `func` es llamada automáticamente, recibe el string y la expresión insertada y los puede procesar. Eso se llama "plantillas etiquetadas". Esta característica hace que sea más fácil implementar plantillas personalizadas, pero es raramente usada en la práctica. Puedes leer más sobre esto en [docs](mdn:/JavaScript/Reference/Template_literals#Tagged_templates).

## Caracteres especiales

Expand Down Expand Up @@ -81,7 +81,7 @@ Esta es la lista completa:
| Carácter | Descripción |
|-----------|-------------|
|`\n`|Nueva línea|
|`\r`|Carriage return (retorno de carro): No se usa solo. Los archivos de texto de Windows usan una combinaión de dos caracteres `\r\n` para representar un corte de línea. |
|`\r`|Retorno de carro: No se usa aislado. Los archivos de texto de Windows usan una combinación de dos caracteres `\r\n` para representar un corte de línea. |
|`\'`, `\"`|Comillas|
|`\\`|Barra invertida|
|`\t`|Tabulación|
Expand Down Expand Up @@ -608,7 +608,7 @@ En muchos idiomas hay símbolos que se componen del carácter base con una marca

Por ejemplo, la letra `a` puede ser el carácter base para:` àáâäãåā`. Los caracteres "compuestos" más comunes tienen su propio código en la tabla UTF-16. Pero no todos ellos, porque hay demasiadas combinaciones posibles.

Para mantener composiciones arbitrarias, UTF-16 nos permite usar varios caracteres unicode. El carácter base y uno o varios caracteres de "marca" que lo "decoran".
Para mantener composiciones arbitrarias, UTF-16 nos permite usar varios caracteres Unicode. El carácter base y uno o varios caracteres de "marca" que lo "decoran".

Por ejemplo, si tenemos `S` seguido del carácter especial" punto arriba "(código` \ u0307`), se muestra como Ṡ.

Expand All @@ -626,7 +626,7 @@ Por ejemplo:
alert('S\u0307\u0323'); // Ṩ
```

Esto proporciona una gran flexibilidad, pero también un problema interesante: dos caracteres pueden verse visualmente iguales, pero estar representados con diferentes composiciones unicode.
Esto proporciona una gran flexibilidad, pero también un problema interesante: dos caracteres pueden ser visualmente iguales, pero estar representados con diferentes composiciones Unicode.

Por ejemplo:

Expand All @@ -639,7 +639,7 @@ alert( `s1: ${s1}, s2: ${s2}` );
alert( s1 == s2 ); // false aunque los caracteres se ven idénticos (?!)
```

Para resolver esto, existe un algoritmo de "normalización unicode" que lleva cada cadena a la forma "normal".
Para resolver esto, existe un algoritmo de "normalización Unicode" que lleva cada cadena a la forma "normal".

Este es implementado por [str.normalize()](mdn:js/String/normalize).

Expand All @@ -661,14 +661,14 @@ Si desea obtener más información sobre las reglas y variantes de normalizació

## Resumen

- Existen 3 tipos de comillas. Los backticks permiten que una cadena abarque varias líneas e incorpore expresiones.
- Existen 3 tipos de entrecomillado. Los backticks permiten que una cadena abarque varias líneas e incorporar expresiones `${…}`.
- Strings en JavaScript son codificados usando UTF-16.
- Podemos usar caracteres especiales como `\n` e insertar letras por su código unico usando `\u ... `.
- Para obtener un caracter, usa: `[]`.
- Para obtener un carácter, usa: `[]`.
Comment thread
joaquinelio marked this conversation as resolved.
- Para obtener un substring, usa: `slice` o `substring`.
- Para convertir un string en minúsculas/mayúsculas, usa: `toLowerCase/toUpperCase`.
- Para buscar por un substring, usa: `indexOf`, o `includes/startsWith/endsWith` para checkeos simples.
- Para comparar strings de acuerdo al languagje, usa: `localeCompare`, de otra manera seran comparados como códigos de caracter.
- Para comparar strings de acuerdo al languagje, usa: `localeCompare`, de otra manera seran comparados como códigos de carácter.

Existen varios otros métodos útiles en cadenas:

Expand Down
4 changes: 2 additions & 2 deletions 1-js/05-data-types/06-iterable/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ let range = {
// for(let num of range) ... num=1,2,3,4,5
```

Para hacer que el `range` sea iterable (y así permitir que `for..of` funcione) necesitamos agregar un método al objeto llamado `Symbol.iterator` (un símbolo incorporado especial usado solo para realizar esa función, proporcionar iterabilidad).
Para hacer que el objeto `range` sea iterable (y así permitir que `for..of` funcione) necesitamos agregarle un método llamado `Symbol.iterator` (un símbolo incorporado especial usado solo para realizar esa función).

1. Cuando se inicia el `for..of`, éste llama al método `Symbol.iterator` una vez (o genera un error si no lo encuentra). El método debe devolver un *iterador* --un objeto con el método `next()`.
2. En adelante, `for..of` trabaja *solo con ese objeto devuelto*.
Expand Down Expand Up @@ -295,7 +295,7 @@ alert( str.slice(1, 3) ); // garbage (dos piezas de diferentes pares sustitutos)
Los objetos que se pueden usar en `for..of` se denominan *iterables*.

- Técnicamente, los iterables deben implementar el método llamado `Symbol.iterator`.
- El resultado de `obj[Symbol.iterator]` se llama *iterador*. Maneja el proceso de iteración adicional.
- El resultado de `obj[Symbol.iterator]()` se llama *iterador*. Maneja el proceso de iteración adicional.
- Un iterador debe tener el método llamado `next()` que devuelve un objeto `{done: Boolean, value: any}`, donde `done: true` denota el final de la iteración, de lo contrario, `value` es el siguiente valor.
- El método `Symbol.iterator` se llama automáticamente por `for..of`, pero también podemos hacerlo directamente.
- Los iterables integrados, como cadenas o matrices, también implementan `Symbol.iterator`.
Expand Down
1 change: 1 addition & 0 deletions 1-js/05-data-types/07-map-set/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Intentémoslo:

```js run
let john = { name: "John" };
let ben = { name: "Ben" };

let visitsCountObj = {}; // intenta usar un objeto

Expand Down
3 changes: 3 additions & 0 deletions 1-js/05-data-types/12-json/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ name: John
name: Alice
place: [object Object]
number: 23
occupiedBy: [object Object]
*/
```

Expand Down Expand Up @@ -328,6 +329,8 @@ alert(JSON.stringify(user, null, 2));
*/
```

El tercer argumento puede ser también string. En ese caso el string será usado como indentación en lugar de un número de espacios.

El argumento `space` es utilizado únicamente para propósitos de registro y agradable impresión.

## "toJSON" Personalizado
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

Ahora el código:

```js run
```js demo run
function sum(a) {

let currentSum = a;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Aquí está el código para ello (usa el decorador debounce del [Lodash library]
```js
let f = _.debounce(alert, 1000);

f("a");
f("a");
setTimeout( () => f("b"), 200);
setTimeout( () => f("c"), 500);
// la función debounce espera 1000 ms después de la última llamada y luego ejecuta: alert ("c")
Expand Down
Loading