Manz 🇮🇨⚡👾 Profile picture
@Twitch Partner | Web developer & Engineer | https://t.co/oZxUdJAcAG Content creator at https://t.co/29SSwBNOt5 | I❤️HTML/CSS/JS FullStack teacher at @eoi | «Odio quedarme a med

Nov 8, 2021, 11 tweets

JAJAJAJA
#Javascript es raro

(Pues no tan raro como crees, lo explico)

🧵Abro hilo.

Me encuentro muchos tweets similares. En general, gente que no ha pensado demasiado lo que está ocurriendo (o no profundiza), o simplemente es hater de Javascript (y lo usan como excusa).

Un claro ejemplo es este popular meme, que expliqué en otro hilo:

«Pero a ver, Manz... ¿Qué estás diciendo? Javascript dice ahí que un array vacío no es lo mismo que un array vacío, obviamente está roto...»

Varias cosas:
1️⃣ Asumimos incorrectamente
2️⃣ Tipos primitivos / objetos complejos
3️⃣ Conceptos "valor" y "referencia"

En Javascript, los tipos primitivos (strings, números y booleanos...) se pasan por valor, es decir, cada vez que comparas, son datos "simples" o "ligeros", por lo que se comparan por su valor.

Sin embargo, eso sólo ocurre con tipos primitivos. Tipos de datos no primitivos (más complejos) como arrays, objetos o incluso expresiones regulares, se comparan por su referencia, es decir, por el "lugar de memoria" donde están almacenados y podemos acceder a ellos.

¿A que este ejemplo no parece tan raro como el primero? Sin embargo, es lo mismo:

1️⃣ Guardamos en `a` un array.
2️⃣ Guardamos en `b` OTRO array.
3️⃣ Ambos están vacíos, pero son arrays diferentes.
4️⃣ Insertamos valores para verlo más claramente.
5️⃣ Efectivamente, no son lo mismo.

Para verlo aún más claro, observa:

1️⃣ Guardamos un mismo array en `a` y también en `b`
2️⃣ Comprobamos
3️⃣ Efectivamente, es el mismo.

Porque ahora tanto `a` como `b` apuntan a la misma referencia.

(Comprueba, si quieres, que si alteras `a`, también alteras `b`)

Y el paso por valor o paso por referencia no es algo expresamente de Javascript. También ocurre en otros lenguajes como Java, por ejemplo.

De igual forma, mucha gente asigna el clásico
`0.2 + 0.1 === 0.30000000000000004` a Javascript, cuando no es así:

0.30000000000000004.com

Ya no veras la cara de Brendan de la misma forma...

¡Aprovecho para decir que estoy haciendo cositas chulas en Twitch! ¡Sígueme!

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling