Pinned Tweet
Encontrar elementos comunes entre dos Sets en JavaScript solía requerir convertir a arrays y usar .filter().
Ahora puedes usar el método nativo .intersection(). Más limpio, legible y con mejor rendimiento. 🧵👇
¿Aún envuelves todo en bloques try / finally para no olvidar cerrar recursos o limpiar estados? 🚫
Con using y Symbol.dispose (ES2025) JavaScript libera recursos automáticamente al salir del scope. 👇⚡
#JavaScript #WebDev #React #CleanCode
Claves de using y Symbol.dispose:
🔹 Limpieza determinista al cerrar las llaves { } del bloque.
🔹 Se ejecuta incluso si hay un return temprano o throw.
🔹 Ideal para file handles, locks, timers y suscripciones.
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
¿Aún calculas posiciones con getBoundingClientRect para animar cambios de estado en el DOM? 🚫
Con document.startViewTransition() el navegador interpola estados automáticamente en 1 línea. 👇⚡
#JavaScript #WebDev #React #CleanCode
Claves de document.startViewTransition():
🔹 Captura snapshots del antes y después automáticamente.
🔹 Anima posición, tamaño y opacidad sin librerías externas.
🔹 Ideal con degradación elegante (progressive enhancement).
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
¿Aún usas [...setA].every(x => setB.has(x)) para validar permisos en JS? 🚫
Con Set.prototype.isSubsetOf() (ES2024) compruebas si un conjunto está contenido en otro en 1 sola línea. 👇⚡
#JavaScript #WebDev #React #CleanCode
Claves de isSubsetOf() y isSupersetOf():
🔹 Evaluación matemática nativa en tiempo lineal O(n).
🔹 Cero arrays temporales intermedios.
🔹 Ideal para validar roles (RBAC), flags y requisitos.
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
¿Necesitas cancelar un fetch si el usuario hace clic o si pasa un tiempo límite? 🚫
No agregues listeners manuales cruzados. Con AbortSignal.any() (ES2024) combinas señales en 1 sola línea. 👇⚡
#JavaScript #WebDev #React #CleanCode
Claves de AbortSignal.any():
🔹 Se aborta en cuanto cualquiera de las señales secundarias lo hace.
🔹 Propaga el motivo exacto de la cancelación (signal.reason).
🔹 Evita fugas de memoria por listeners cruzados huérfanos.
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
¿Aún escribes array[array.length - 1] para leer el último elemento? 🚫
Con Array.prototype.at() de ES2022 usas índices negativos directos (.at(-1)) sin duplicar referencias. 👇⚡
#JavaScript #WebDev #React #CleanCode
Claves de Array.prototype.at():
🔹 Acepta índices negativos (-1 para el último, -2 penúltimo).
🔹 Ideal para encadenar: items.filter(...).at(-1).
🔹 Funciona igual en strings y colecciones indexadas.
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
tocanto.js retweeted
No echo de menos escribir código.
Pero sí echo de menos estar yo solo delante de un problema sin tener ni idea de cómo resolverlo.
Probar. Fallar. Darle vueltas durante horas. Y conseguirlo.
Al terminar no solo habías resuelto el problema. Notabas que algo había cambiado en tu cabeza. Habías desbloqueado algo en tu forma de pensar.
Ahora siento que tengo que esforzarme para usar mis propias neuronas. La recompensa es demasiado inmediata.
Antes estaba en resolver algo después de horas de frustración. Ahora puede estar en escribir un prompt y ver aparecer el resultado en segundos.
Hemos trasladado parte de la dopamina del scroll infinito a los prompts infinitos.
Y me preocupa lo fácil que resulta dejar de valorar el esfuerzo.
No solo programando.
Pensar cuesta.
Entender al otro cuesta.
Cambiar de opinión cuesta.
Y ahora incluso podemos preguntarle a una IA hasta encontrar una respuesta que confirme exactamente lo que ya pensábamos.
Siempre he dicho que lo bonito de programar nunca fue escribir código. Era resolver problemas.
Y, curiosamente, eso sigue siendo lo que más me gusta de la IA: me permite resolver problemas que antes ni siquiera podía plantearme.
Solo intento que, por el camino, no resuelva también por mí el esfuerzo de pensar.
¿Aún usas await new Promise(r => setTimeout(r, 0)) para no congelar la UI? 🚫
scheduler.yield() cede el hilo principal al navegador para pintar eventos y retoma de inmediato sin penalización. 👇⚡
#JavaScript #WebDev #React #Performance
Claves de scheduler.yield():
🔹 Evita el bloqueo del main thread en bucles pesados.
🔹 No introduce el retraso forzado de 4ms de setTimeout.
🔹 Mejora directamente métricas como INP (Interaction to Next Paint).
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
¿Sabías que structuredClone() puede transferir memoria en tiempo O(1) sin clonarla? 🚫
Con la opción { transfer: [buffer] } mueves ArrayBuffers gigantes sin duplicar consumo de RAM. 👇⚡
#JavaScript #WebDev #React #Performance
Claves de { transfer } en structuredClone:
🔹 Mueve la propiedad del buffer sin copiar bytes.
🔹 El buffer original queda desvinculado (byteLength: 0).
🔹 Ideal para Web Workers, audio, canvas y WebAssembly.
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
30 días de JS moderno 🎉 ¿Sabías que ya no necesitas clonar iteradores a arrays para mapear?
Con los Iterator Helpers de ES2025 encadenas .map(), .filter() y .take() de forma perezosa (lazy). 👇⚡
#JavaScript #WebDev #React #CleanCode
Claves de los Iterator Helpers:
🔹 Evaluación lazy: procesa elemento por elemento bajo demanda.
🔹 Funciona con Sets, Maps, Generadores e iterables infinitos.
🔹 .take(n) y .drop(n) sin alocar memoria innecesaria.
📌 Repo y cheatsheet:
github.com/tocanto/modern-js…
tocanto.js retweeted
He recopilado 179 libros gratis de programación en español.
PDF, HTML y EPUB. 42 temas: JavaScript, Python, TypeScript, React, Rust, Git, SQL…
Sin registro, sin pagos, sin sorpresas:
→ librosgratis.dev

ALT Captura de una web en modo oscuro titulada “Libros gratis de programación en español”, con 179 libros sobre 42 temas en PDF y HTML. Incluye buscador y una gran colección de iconos de tecnologías como JavaScript, TypeScript, Python, Rust, React, Java, Go y muchas más. Básicamente, una biblioteca donde el único bug es no saber qué aprender primero.











