\\\";const output = safeHTML`User said: ${userInput}`;console.log(output); // User said:
Плюсы:
Минусы:
Что такое WeakMaps и WeakSets?
WeakMaps — это коллекции пар ключ-значение, на ключи которых имеются слабые ссылки. Это означает, что если других ссылок на ключ не существует, запись удаляется сборщиком мусора.
Проблема: Вы создаете систему кэширования и хотите быть уверенным, что, когда объекты больше не нужны, они автоматически удаляются мусором для освобождения памяти.
Пример:
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
Плюсы:
Минусы:
Что такое каррирование?
Каррирование преобразует функцию, принимающую несколько аргументов, в последовательность функций, каждая из которых принимает один аргумент. Это метод функционального программирования, который может повысить гибкость кода.
Проблема: Допустим, у вас есть функция, которая применяет скидку на основе процента. Вы хотите повторно использовать эту функцию с разными процентами во всем приложении.
Пример:
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
Плюсы:
Минусы:
Каждая из этих передовых концепций JavaScript — прокси, символы, генераторы, литералы шаблонов с тегами, WeakMaps и карринг — предлагает уникальные возможности для решения конкретных проблем более эффективными, масштабируемыми и элегантными способами. Однако они имеют свои недостатки, такие как повышенная сложность или потенциальные проблемы с производительностью.
Ключевой вывод — понимать, когда и где использовать эти концепции. Тот факт, что они существуют, не означает, что вы должны использовать их в каждом проекте. Вместо этого используйте их, когда они дают явные преимущества, например улучшение читаемости кода, производительности или гибкости.
Изучая эти передовые методы, вы сможете решать более сложные проблемы и писать более мощный JavaScript.
","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 — это язык, который многие разработчики используют ежедневно, но в его экосистеме есть множество скрытых жемчужин, с которыми могут быть не знакомы даже опытные разработчики. В этой статье рассматриваются некоторые менее известные концепции JavaScript, которые могут значительно улучшить ваши навыки программирования. Мы рассмотрим такие понятия, как Прокси, Символы, Генераторы и другие, демонстрируя каждую из них на примерах и решая задачи, чтобы проиллюстрировать их возможности.
К концу вы получите более глубокое понимание JavaScript и будете знать, когда (а когда нет) использовать эти расширенные функции.
Что такое прокси?
Прокси-сервер в JavaScript позволяет перехватывать и настраивать фундаментальные операции, такие как поиск свойств, присваивание и вызов функций.
Проблема: Представьте, что вы создаете систему, в которой у пользователей есть объекты, отслеживающие их действия. Вместо того, чтобы изменять каждую часть вашего приложения для отслеживания доступа к ресурсам, вы можете использовать прокси-сервер для перехвата и регистрации этих действий.
Пример:
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
Плюсы:
Минусы:
Что такое символы?
Символы — это новый примитивный тип, представленный в ES6. Они предоставляют уникальные ключи для свойств объекта, что делает их полезными, когда вам нужно избежать конфликтов имен свойств.
Проблема: Допустим, вы работаете над объектом, который интегрируется со сторонним кодом, и хотите добавить пользовательские свойства, не перезаписывая их ключи.
Пример:
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
Плюсы:
Минусы:
Что такое генераторы?
Генераторы — это функции, которые можно приостанавливать и возобновлять, что делает их полезными для управления асинхронными потоками или создания данных по требованию.
Задача: Предположим, вы хотите сгенерировать последовательность чисел Фибоначчи. Вместо того, чтобы заранее генерировать всю последовательность, вы можете создать генератор, который выдает значения одно за другим, что позволяет выполнять ленивые вычисления.
Пример:
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
Плюсы:
Минусы:
Что такое литералы шаблона с тегами?
Шаблоны с тегами позволяют обрабатывать литералы шаблона с помощью функции, что делает их невероятно мощными для создания DSL (предметно-ориентированных языков), таких как библиотеки CSS-in-JS.
Проблема: Вам необходимо создать систему шаблонов, которая обрабатывает пользовательский ввод и очищает его, чтобы избежать XSS-атак.
Пример:
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>
Плюсы:
Минусы:
Что такое WeakMaps и WeakSets?
WeakMaps — это коллекции пар ключ-значение, на ключи которых имеются слабые ссылки. Это означает, что если других ссылок на ключ не существует, запись удаляется сборщиком мусора.
Проблема: Вы создаете систему кэширования и хотите быть уверенным, что, когда объекты больше не нужны, они автоматически удаляются мусором для освобождения памяти.
Пример:
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
Плюсы:
Минусы:
Что такое каррирование?
Каррирование преобразует функцию, принимающую несколько аргументов, в последовательность функций, каждая из которых принимает один аргумент. Это метод функционального программирования, который может повысить гибкость кода.
Проблема: Допустим, у вас есть функция, которая применяет скидку на основе процента. Вы хотите повторно использовать эту функцию с разными процентами во всем приложении.
Пример:
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
Плюсы:
Минусы:
Каждая из этих передовых концепций JavaScript — прокси, символы, генераторы, литералы шаблонов с тегами, WeakMaps и карринг — предлагает уникальные возможности для решения конкретных проблем более эффективными, масштабируемыми и элегантными способами. Однако они имеют свои недостатки, такие как повышенная сложность или потенциальные проблемы с производительностью.
Ключевой вывод — понимать, когда и где использовать эти концепции. Тот факт, что они существуют, не означает, что вы должны использовать их в каждом проекте. Вместо этого используйте их, когда они дают явные преимущества, например улучшение читаемости кода, производительности или гибкости.
Изучая эти передовые методы, вы сможете решать более сложные проблемы и писать более мощный JavaScript.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3