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í:
Como curiosidades, hemos diseñado todo sin utilizar imágenes, sólo usamos #CSS para diseñar, y #WebComponents (nativos) para encapsular y reutilizar.
- 11 WebComponents
- 515 líneas totales de Javascript
- 449 líneas totales de CSS
Utilizamos la tipografía «Heroes Legend» para el logo, y la tipografía Bebas Neue para el resto de textos. Nuestra versión se llama «Punko FOP!» (gracias a pbl78 por la idea).
Developah: ¿Poner una imagen en HTML? ¡Claro que sé hacerlo! ¡Eso lo sabe hacer todo el mundo!
🧵Abro hilo.
A ver, maticemos un poco antes de que me caigan encima, que puede sonar prepotente.
En HTML suelen pasar dos cosas:
✅Es MUY FÁCIL hacer algo.
✅Es DIFÍCIL hacerlo correctamente.
¿Cómo pondrías una imagen?
— Fácil. Uso etiqueta `<img>` y en el atributo `src` pongo la imagen.
✅¿Funciona? Sí
❌¿Es correcto? No
En HTML, TODAS las etiquetas `<img>` deben tener el atributo `alt`, donde se debe especificar un «texto alternativo» de reemplazo por si, por alguna razón, las imágenes no están disponibles, se muestre dicho texto.
Desde selectores #CSS, se pueden seleccionar etiquetas dependiendo de sus atributos HTML.
Por ejemplo, `a[href$=".pdf"]` selecciona todos los enlaces a archivos con extensión `.pdf`, pero `a[href$=".pdf" i]` hace lo mismo sin tener en cuenta mayúsculas/minúsculas.