JavaScript のシンボルと例

Susan Sarandon
Susan Sarandonオリジナル
2024-12-03 19:16:10570ブラウズ

Symbol in Javascript with Example

シンボルは、コンストラクターがシンボル プリミティブを返す組み込みオブジェクトです。シンボル値、または単にシンボルとも呼ばれます — それは一意であることが保証されています。シンボルは、他のコードがオブジェクトに追加するキーと衝突せず、オブジェクトにアクセスするために他のコードが通常使用するメカニズムから隠蔽される、一意のプロパティ キーをオブジェクトに追加するためによく使用されます。これにより、弱いカプセル化の形式、または弱い形式の情報隠蔽が可能になります。

例: シンボルを一意のプロパティ キーとして使用する

javascript
Copy code
// Create unique symbols
const id = Symbol('id');
const name = Symbol('name');

// Create an object with symbol-based properties
const user = {
    [id]: 101,
    [name]: 'Alice',
    age: 25
};

// Access the symbol properties
console.log(user[id]); // 101
console.log(user[name]); // "Alice"

// Add another property using a symbol
const email = Symbol('email');
user[email] = 'alice@example.com';

console.log(user[email]); // "alice@example.com"

// Symbols are not enumerable in for...in loops or Object.keys
for (const key in user) {
    console.log(key); // Only "age" is logged
}

console.log(Object.keys(user)); // ["age"]

// You can still access all properties if you know the symbol keys
console.log(Object.getOwnPropertySymbols(user)); // [Symbol(id), Symbol(name), Symbol(email)]


例: Symbol.iterator を使用してオブジェクトを反復可能にする

javascript
Copy code
const collection = {
    items: ['apple', 'banana', 'cherry'],
    [Symbol.iterator]() {
        let index = 0;
        const items = this.items;
        return {
            next() {
                if (index < items.length) {
                    return { value: items[index++], done: false };
                } else {
                    return { done: true };
                }
            }
        };
    }
};

// Iterate over the object
for (const item of collection) {
    console.log(item);
}
// Output:
// apple
// banana
// cherry

この例は、Symbol.iterator が for...of を使用してカスタム オブジェクトを反復できるようにする方法を示しています。

一般的な npm ライブラリで使用できるシンボル:

例: 一般的な npm ライブラリでのシンボルの使用

シンボルの使用例として注目すべきものは、Node.js で広く使用されている Web アプリケーション フレームワークである Express.js フレームワークです。 Express.js では、Symbol を使用して一意のプロパティ キーを定義し、ユーザー定義のプロパティとの潜在的な競合を防ぎます。

Express.js のコード スニペット:

javascript
Copy code
// In Express.js, a symbol is used to define a unique property key
const app = express();
app[Symbol('router')] = router;

このスニペットでは、Symbol('router') はアプリ オブジェクトのプロパティ キーとして機能する一意のシンボルを作成します。このアプローチにより、ルーターのプロパティが明確になり、アプリ オブジェクトに追加される可能性のある他のプロパティに干渉しなくなります。

ライブラリでシンボルを使用する利点:

  • 一意性: シンボルはプロパティ キーが一意であることを保証し、誤って上書きされるリスクを軽減します。
  • 不変性: 一度作成されたシンボルは変更できず、安定した識別子を提供します。
  • 非列挙性: シンボルによってキー設定されたプロパティはループ内で列挙可能ではありません。これは、公開すべきでない内部プロパティにとって有益である可能性があります。

以上がJavaScript のシンボルと例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。