JavaScript/symbol
symbol
編集symbol は、JavaScriptで一意の識別子を生成するためのプリミティブデータ型です。Symbol()
コンストラクタを使用して作成され、主にオブジェクトのプロパティキーとして使用されます。
構文
編集// Symbol の作成 const symbol1 = Symbol(); // 一意の Symbol const symbol2 = Symbol("説明文"); // 説明文付き Symbol const globalSymbol = Symbol.for("shared"); // 共有 Symbol
説明
編集symbol
型は常に一意であるため、他の値や同じ説明文で作成された他のsymbol
と一致しません。Symbol.for()
を使用すると、共有シンボルを作成し、同じキーで取得できます。- シンボルは暗黙的な型変換が行われず、
string
型などと自動的に結合されることはありません。
使用例
編集// Symbol の作成 const uniqueSymbol = Symbol("説明文"); const anotherSymbol = Symbol("説明文"); console.log(uniqueSymbol === anotherSymbol); // false(一意性が保証される) // オブジェクトのプロパティキーとしての使用 const obj = { [uniqueSymbol]: "値", }; console.log(obj[uniqueSymbol]); // "値" // Symbol.for を使用した共有シンボル const sharedSymbol1 = Symbol.for("共有キー"); const sharedSymbol2 = Symbol.for("共有キー"); console.log(sharedSymbol1 === sharedSymbol2); // true // Symbol.keyFor を使用して共有シンボルのキーを取得 console.log(Symbol.keyFor(sharedSymbol1)); // "共有キー" // Symbol は暗黙的な型変換を許可しない const sym = Symbol("テスト"); // console.log("値は " + sym); // TypeError: Cannot convert a Symbol value to a string
注意点
編集symbol
型はstring
やnumber
とは異なり、オブジェクト
のプロパティキーとして使用しても他のキーと衝突することがありません。- シンボルは列挙可能ではなく、
for...in
ループやObject.keys()
には現れません。ただし、Object.getOwnPropertySymbols()
を使用すれば取得可能です。
組み込みの Symbol
編集JavaScript にはいくつかの組み込みシンボルが存在し、特定の言語機能をカスタマイズできます。
シンボル名 | 説明 |
---|---|
Symbol.iterator
|
イテラブルオブジェクトを作成するためのシンボル。 |
Symbol.toStringTag
|
Object.prototype.toString の出力をカスタマイズするためのシンボル。
|
Symbol.asyncIterator
|
非同期イテラブルオブジェクトを作成するためのシンボル。 |