\\\";const output = safeHTML`User said: ${userInput}`;console.log(output); // User said:
Avantages :
Inconvénients :
Que sont les WeakMaps et les WeakSets ?
WeakMaps sont des collections de paires clé-valeur où les clés sont faiblement référencées. Cela signifie que s'il n'existe aucune autre référence à la clé, l'entrée est récupérée.
Problème : Vous créez un système de mise en cache et vous souhaitez vous assurer qu'une fois que les objets ne sont plus nécessaires, ils sont automatiquement récupérés pour libérer de la mémoire.
Exemple:
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
Avantages :
Inconvénients :
Qu'est-ce que le curry ?
Currying transforme une fonction qui prend plusieurs arguments en une séquence de fonctions qui prennent chacune un seul argument. Il s'agit d'une technique de programmation fonctionnelle qui peut augmenter la flexibilité du code.
Problème : Disons que vous disposez d'une fonction qui applique une remise basée sur un pourcentage. Vous souhaitez réutiliser cette fonction avec différents pourcentages dans toute votre application.
Exemple:
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
Avantages :
Inconvénients :
Chacun de ces concepts JavaScript avancés (Proxies, Symboles, Générateurs, Littéraux de modèles balisés, WeakMaps et Currying) offre des fonctionnalités uniques pour résoudre des problèmes spécifiques de manière plus efficace, évolutive ou élégante. Cependant, ils s'accompagnent de compromis, tels qu'une complexité accrue ou des problèmes de performances potentiels.
La clé à retenir est de comprendre quand et où utiliser ces concepts. Ce n’est pas parce qu’ils existent que vous devez les utiliser dans chaque projet. Au lieu de cela, intégrez-les lorsqu'ils offrent des avantages évidents, comme l'amélioration de la lisibilité du code, des performances ou de la flexibilité.
En explorant ces techniques avancées, vous serez en mesure de résoudre des problèmes plus sophistiqués et d'écrire du JavaScript plus puissant.
","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 est un langage que de nombreux développeurs utilisent quotidiennement, mais il existe de nombreux joyaux cachés au sein de son écosystème que même les développeurs expérimentés ne connaissent peut-être pas. Cet article explore certains concepts JavaScript moins connus qui peuvent améliorer considérablement vos compétences en programmation. Nous aborderons des concepts tels que Proxies, Symboles, Générateurs, et plus encore, en démontrant chacun avec des exemples et en résolvant des problèmes pour illustrer leur puissance.
À la fin, vous aurez une compréhension plus approfondie de JavaScript et saurez quand (et quand ne pas) utiliser ces fonctionnalités avancées.
Que sont les proxys ?
Un proxy en JavaScript vous permet d'intercepter et de personnaliser des opérations fondamentales telles que les recherches de propriétés, les affectations et les invocations de fonctions.
Problème : Imaginez que vous construisez un système dans lequel les utilisateurs disposent d'objets qui suivent leurs actions. Au lieu de modifier chaque partie de votre application pour suivre l'accès à la propriété, vous pouvez utiliser un proxy pour intercepter et enregistrer ces actions.
Exemple:
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
Avantages :
Inconvénients :
Que sont les symboles ?
Les symboles sont un nouveau type primitif introduit dans ES6. Ils fournissent des clés uniques pour les propriétés des objets, ce qui les rend utiles lorsque vous devez éviter les collisions de noms de propriétés.
Problème : Supposons que vous travaillez sur un objet qui s'intègre à du code tiers et que vous souhaitez ajouter des propriétés personnalisées sans écraser leurs clés.
Exemple:
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
Avantages :
Inconvénients :
Que sont les générateurs ?
Les générateurs sont des fonctions qui peuvent être mises en pause et reprises, ce qui les rend utiles pour gérer des flux asynchrones ou produire des données à la demande.
Problème : Supposons que vous souhaitiez générer une séquence de nombres de Fibonacci. Au lieu de générer la séquence entière à l'avance, vous pouvez créer un générateur qui génère les valeurs une par une, permettant une évaluation paresseuse.
Exemple:
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
Avantages :
Inconvénients :
Que sont les littéraux de modèle balisés ?
Les modèles balisés vous permettent de traiter les littéraux de modèles avec une fonction, ce qui les rend incroyablement puissants pour créer des DSL (langages spécifiques à un domaine) comme les bibliothèques CSS-in-JS.
Problème : Vous devez créer un système de modèles qui traite les entrées de l'utilisateur et les nettoie pour éviter les attaques XSS.
Exemple:
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>
Avantages :
Inconvénients :
Que sont les WeakMaps et les WeakSets ?
WeakMaps sont des collections de paires clé-valeur où les clés sont faiblement référencées. Cela signifie que s'il n'existe aucune autre référence à la clé, l'entrée est récupérée.
Problème : Vous créez un système de mise en cache et vous souhaitez vous assurer qu'une fois que les objets ne sont plus nécessaires, ils sont automatiquement récupérés pour libérer de la mémoire.
Exemple:
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
Avantages :
Inconvénients :
Qu'est-ce que le curry ?
Currying transforme une fonction qui prend plusieurs arguments en une séquence de fonctions qui prennent chacune un seul argument. Il s'agit d'une technique de programmation fonctionnelle qui peut augmenter la flexibilité du code.
Problème : Disons que vous disposez d'une fonction qui applique une remise basée sur un pourcentage. Vous souhaitez réutiliser cette fonction avec différents pourcentages dans toute votre application.
Exemple:
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
Avantages :
Inconvénients :
Chacun de ces concepts JavaScript avancés (Proxies, Symboles, Générateurs, Littéraux de modèles balisés, WeakMaps et Currying) offre des fonctionnalités uniques pour résoudre des problèmes spécifiques de manière plus efficace, évolutive ou élégante. Cependant, ils s'accompagnent de compromis, tels qu'une complexité accrue ou des problèmes de performances potentiels.
La clé à retenir est de comprendre quand et où utiliser ces concepts. Ce n’est pas parce qu’ils existent que vous devez les utiliser dans chaque projet. Au lieu de cela, intégrez-les lorsqu'ils offrent des avantages évidents, comme l'amélioration de la lisibilité du code, des performances ou de la flexibilité.
En explorant ces techniques avancées, vous serez en mesure de résoudre des problèmes plus sophistiqués et d'écrire du JavaScript plus puissant.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3