\\\";const Output =safeHTML`ユーザーは次のように言いました: ${userInput}`;console.log(出力); // ユーザーが言った:
function* fibonacci() { let a = 0, b = 1; while (true) { yield a; [a, b] = [b, a b]; }}const fib = fibonacci();console.log(fib.next().value); // 0console.log(fib.next().value); // 1console.log(fib.next().value); // 1console.log(fib.next().value); // 2
長所:
短所:
WeakMap と WeakSet とは何ですか?
WeakMap は、キーが弱参照されるキーと値のペアのコレクションです。これは、キーへの参照が他に存在しない場合、エントリはガベージ コレクションされることを意味します。問題: あなたはキャッシュ システムを構築していますが、オブジェクトが不要になったら、メモリを解放するために自動的にガベージ コレクションが行われるようにしたいと考えています。
例:
function* fibonacci() { let a = 0, b = 1; while (true) { yield a; [a, b] = [b, a b]; }}const fib = fibonacci();console.log(fib.next().value); // 0console.log(fib.next().value); // 1console.log(fib.next().value); // 1console.log(fib.next().value); // 2
長所:
短所:
カリー化とは何ですか?
カリー化は、複数の引数を取る関数を、それぞれが 1 つの引数を取る一連の関数に変換します。これは、コードの柔軟性を高めることができる関数型プログラミング手法です。問題: パーセンテージに基づいて割引を適用する関数があるとします。アプリ全体でこの関数をさまざまな割合で再利用したいと考えています。
例:
function* fibonacci() { let a = 0, b = 1; while (true) { yield a; [a, b] = [b, a b]; }}const fib = fibonacci();console.log(fib.next().value); // 0console.log(fib.next().value); // 1console.log(fib.next().value); // 1console.log(fib.next().value); // 2
長所:
短所:
これらの概念をいつ、どこで使用するかを理解することです。それらが存在するからといって、すべてのプロジェクトでそれらを使用する必要があるという意味ではありません。代わりに、コードの可読性、パフォーマンス、柔軟性の向上など、明確なメリットが得られる場合にはそれらを組み込んでください。
これらの高度なテクニックを検討することで、より複雑な問題に取り組み、より強力な 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
長所:
短所:
ジェネレーターとは何ですか?
ジェネレーターは一時停止および再開できる関数であり、非同期フローの管理やオンデマンドでのデータ生成に役立ちます。
問題: フィボナッチ数列を生成するとします。シーケンス全体を前もって生成する代わりに、値を 1 つずつ生成するジェネレーターを作成して、遅延評価を可能にすることができます。
例:
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
長所:
短所:
タグ付きテンプレート リテラルとは何ですか?
タグ付きテンプレートを使用すると、関数を使用してテンプレート リテラルを処理できるため、CSS-in-JS ライブラリなどの DSL (ドメイン固有言語) の構築に非常に強力になります。
問題: XSS 攻撃を避けるために、ユーザー入力を処理してサニタイズするテンプレート システムを構築する必要があります。
例:
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
長所:
短所:
WeakMap と WeakSet とは何ですか?
WeakMap は、キーが弱参照されるキーと値のペアのコレクションです。これは、キーへの参照が他に存在しない場合、エントリはガベージ コレクションされることを意味します。
問題: あなたはキャッシュ システムを構築していますが、オブジェクトが不要になったら、メモリを解放するために自動的にガベージ コレクションが行われるようにしたいと考えています。
例:
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
長所:
短所:
カリー化とは何ですか?
カリー化は、複数の引数を取る関数を、それぞれが 1 つの引数を取る一連の関数に変換します。これは、コードの柔軟性を高めることができる関数型プログラミング手法です。
問題: パーセンテージに基づいて割引を適用する関数があるとします。アプリ全体でこの関数をさまざまな割合で再利用したいと考えています。
例:
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
長所:
短所:
重要なポイントは、
これらの概念をいつ、どこで使用するかを理解することです。それらが存在するからといって、すべてのプロジェクトでそれらを使用する必要があるという意味ではありません。代わりに、コードの可読性、パフォーマンス、柔軟性の向上など、明確なメリットが得られる場合にはそれらを組み込んでください。
これらの高度なテクニックを検討することで、より複雑な問題に取り組み、より強力な JavaScript を作成できるようになります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3