\\\";const output = safeHTML`User said: ${userInput}`;console.log(output); // User said:
Ventajas:
Contras:
¿Qué son WeakMaps y WeakSets?
WeakMaps son colecciones de pares clave-valor donde las claves tienen referencias débiles. Esto significa que si no existen otras referencias a la clave, la entrada se recolecta como basura.
Problema: Estás creando un sistema de almacenamiento en caché y quieres asegurarte de que una vez que los objetos ya no sean necesarios, se recolecten automáticamente como basura para liberar memoria.
Ejemplo:
let user = { name: \\\"Alice\\\" };const weakCache = new WeakMap();weakCache.set(user, \\\"Cached data\\\");console.log(weakCache.get(user)); // Cached datauser = null; // The entry in weakCache will be garbage collected
Ventajas:
Contras:
¿Qué es el curry?
Currying transforma una función que toma múltiples argumentos en una secuencia de funciones en las que cada una toma un solo argumento. Es una técnica de programación funcional que puede aumentar la flexibilidad del código.
Problema: Digamos que tienes una función que aplica un descuento basado en un porcentaje. Quieres reutilizar esta función con diferentes porcentajes en toda tu aplicación.
Ejemplo:
const applyDiscount = (discount) => (price) => price - price * (discount / 100);const tenPercentOff = applyDiscount(10);const twentyPercentOff = applyDiscount(20);console.log(tenPercentOff(100)); // 90console.log(twentyPercentOff(100)); // 80
Ventajas:
Contras:
Cada uno de estos conceptos avanzados de JavaScript (proxies, símbolos, generadores, literales de plantilla etiquetados, WeakMaps y Currying) ofrece capacidades únicas para resolver problemas específicos de maneras más eficientes, escalables o elegantes. Sin embargo, conllevan compensaciones, como una mayor complejidad o posibles problemas de rendimiento.
La conclusión clave es comprender cuándo y dónde utilizar estos conceptos. El hecho de que existan no significa que debas utilizarlos en todos los proyectos. En su lugar, incorpórelos cuando proporcionen beneficios claros, como mejorar la legibilidad, el rendimiento o la flexibilidad del código.
Al explorar estas técnicas avanzadas, podrás abordar problemas más sofisticados y escribir JavaScript más potente.
","image":"http://www.luping.net/uploads/20241006/172821096567026815e7a06.jpg","datePublished":"2024-11-08T12:01:22+08:00","dateModified":"2024-11-08T12:01:22+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}JavaScript es un lenguaje que muchos desarrolladores utilizan a diario, pero existen numerosas joyas ocultas dentro de su ecosistema con las que incluso los desarrolladores experimentados pueden no estar familiarizados. Este artículo explora algunos conceptos de JavaScript menos conocidos que pueden mejorar significativamente sus habilidades de programación. Cubriremos conceptos como Proxies, Símbolos, Generadores y más, demostrando cada uno con ejemplos y resolviendo problemas para ilustrar su poder.
Al final, tendrás una comprensión más profunda de JavaScript y sabrás cuándo (y cuándo no) usar estas funciones avanzadas.
¿Qué son los proxy?
Un proxy en JavaScript le permite interceptar y personalizar operaciones fundamentales como búsquedas de propiedades, asignaciones e invocaciones de funciones.
Problema: Imagina que estás creando un sistema donde los usuarios tienen objetos que rastrean sus acciones. En lugar de modificar cada parte de tu aplicación para rastrear el acceso a la propiedad, puedes usar un proxy para interceptar y registrar estas acciones.
Ejemplo:
const user = { name: "Alice", age: 25 }; const handler = { get(target, prop) { console.log(`Property '${prop}' was accessed`); return prop in target ? target[prop] : `Property ${prop} doesn't exist`; }, }; const userProxy = new Proxy(user, handler); console.log(userProxy.name); // Logs: Property 'name' was accessed, Returns: Alice console.log(userProxy.address); // Logs: Property 'address' was accessed, Returns: Property address doesn't exist
Ventajas:
Contras:
¿Qué son los símbolos?
Los símbolos son un nuevo tipo primitivo introducido en ES6. Proporcionan claves únicas para las propiedades de los objetos, lo que las hace útiles cuando necesita evitar colisiones de nombres de propiedades.
Problema: Supongamos que está trabajando en un objeto que se integra con código de terceros y desea agregar propiedades personalizadas sin sobrescribir sus claves.
Ejemplo:
const uniqueId = Symbol('id'); const user = { [uniqueId]: 123, name: "Alice" }; console.log(user[uniqueId]); // 123 console.log(Object.keys(user)); // ['name'] - Symbol key is hidden from iteration
Ventajas:
Contras:
¿Qué son los generadores?
Los generadores son funciones que se pueden pausar y reanudar, lo que los hace útiles para gestionar flujos asíncronos o producir datos bajo demanda.
Problema: Supongamos que desea generar una secuencia de números de Fibonacci. En lugar de generar la secuencia completa por adelantado, puedes crear un generador que genere valores uno por uno, lo que permite una evaluación diferida.
Ejemplo:
function* fibonacci() { let a = 0, b = 1; while (true) { yield a; [a, b] = [b, a b]; } } const fib = fibonacci(); console.log(fib.next().value); // 0 console.log(fib.next().value); // 1 console.log(fib.next().value); // 1 console.log(fib.next().value); // 2
Ventajas:
Contras:
¿Qué son los literales de plantilla etiquetados?
Las plantillas etiquetadas le permiten procesar literales de plantilla con una función, lo que las hace increíblemente poderosas para crear DSL (lenguajes específicos de dominio) como bibliotecas CSS-in-JS.
Problema: Necesita crear un sistema de plantillas que procese la entrada del usuario y la desinfecte para evitar ataques XSS.
Ejemplo:
function safeHTML(strings, ...values) { return strings.reduce((acc, str, i) => acc str (values[i] ? escapeHTML(values[i]) : ''), ''); } function escapeHTML(str) { return str.replace(/&/g, "&").replace(/, "<").replace(/>/g, ">"); } const userInput = ""; const output = safeHTML`User said: ${userInput}`; console.log(output); // User said: <script>alert('XSS')</script>
Ventajas:
Contras:
¿Qué son WeakMaps y WeakSets?
WeakMaps son colecciones de pares clave-valor donde las claves tienen referencias débiles. Esto significa que si no existen otras referencias a la clave, la entrada se recolecta como basura.
Problema: Estás creando un sistema de almacenamiento en caché y quieres asegurarte de que una vez que los objetos ya no sean necesarios, se recolecten automáticamente como basura para liberar memoria.
Ejemplo:
let user = { name: "Alice" }; const weakCache = new WeakMap(); weakCache.set(user, "Cached data"); console.log(weakCache.get(user)); // Cached data user = null; // The entry in weakCache will be garbage collected
Ventajas:
Contras:
¿Qué es el curry?
Currying transforma una función que toma múltiples argumentos en una secuencia de funciones en las que cada una toma un solo argumento. Es una técnica de programación funcional que puede aumentar la flexibilidad del código.
Problema: Digamos que tienes una función que aplica un descuento basado en un porcentaje. Quieres reutilizar esta función con diferentes porcentajes en toda tu aplicación.
Ejemplo:
const applyDiscount = (discount) => (price) => price - price * (discount / 100); const tenPercentOff = applyDiscount(10); const twentyPercentOff = applyDiscount(20); console.log(tenPercentOff(100)); // 90 console.log(twentyPercentOff(100)); // 80
Ventajas:
Contras:
Cada uno de estos conceptos avanzados de JavaScript (proxies, símbolos, generadores, literales de plantilla etiquetados, WeakMaps y Currying) ofrece capacidades únicas para resolver problemas específicos de maneras más eficientes, escalables o elegantes. Sin embargo, conllevan compensaciones, como una mayor complejidad o posibles problemas de rendimiento.
La conclusión clave es comprender cuándo y dónde utilizar estos conceptos. El hecho de que existan no significa que debas utilizarlos en todos los proyectos. En su lugar, incorpórelos cuando proporcionen beneficios claros, como mejorar la legibilidad, el rendimiento o la flexibilidad del código.
Al explorar estas técnicas avanzadas, podrás abordar problemas más sofisticados y escribir JavaScript más potente.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3