サーチ…
構文
- シンボル()
- シンボル(説明)
- Symbol.toString()
備考
ECMAScript 2015の仕様19.4シンボル
シンボルプリミティブ型の基礎
Symbol
はES6の新しいプリミティブ型です。シンボルは主にプロパティキーとして使用され、その主な特徴の1つは、同じ記述を持っていても、 ユニークであるということです。つまり、 symbol
やstring
ある他のプロパティキーと名前の衝突を起こすことはありません。
const MY_PROP_KEY = Symbol();
const obj = {};
obj[MY_PROP_KEY] = "ABC";
console.log(obj[MY_PROP_KEY]);
この例では、 console.log
の結果はABC
ます。
名前付きシンボルは次のようにすることもできます:
const APPLE = Symbol('Apple');
const BANANA = Symbol('Banana');
const GRAPE = Symbol('Grape');
これらの値はそれぞれ一意であり、上書きすることはできません。
プリミティブシンボルの作成時にオプションのパラメータ(description)
指定すると、デバッグには使用できますが、シンボル自体にはアクセスできませんSymbol.for()
グローバル共有シンボルの登録/参照の方法についてはSymbol.for()
例を参照してください)。
シンボルを文字列に変換する
他のほとんどのJavaScriptオブジェクトとは異なり、連結を実行するとき、シンボルは自動的に文字列に変換されません。
let apple = Symbol('Apple') + ''; // throws TypeError!
その代わりに、必要に応じて明示的に文字列に変換する必要があります(たとえば、デバッグメッセージで使用できるシンボルのテキスト記述を取得するには) toString
メソッドまたはString
コンストラクタを使用する必要があります。
const APPLE = Symbol('Apple');
let str1 = APPLE.toString(); // "Symbol(Apple)"
let str2 = String(APPLE); // "Symbol(Apple)"
Symbol.for()を使用してグローバルな共有シンボルを作成する
Symbol.for
メソッドを使用すると、グローバルシンボルを名前で登録およびルックアップできます。指定されたキーで最初に呼び出されると、新しいシンボルが作成され、レジストリに追加されます。
let a = Symbol.for('A');
次回Symbol.for('A')
を呼び出すと、新しいシンボルの代わりに同じシンボルが返されます( Symbol('A')
とは対照的に、同じ記述を持つユニークなシンボルが新たに生成されますSymbol('A')
)。
a === Symbol.for('A') // true
しかし
a === Symbol('A') // false