[JavaScript]Symbolをオブジェクトのプロパティキーとして使用

Symbol は組み込みオブジェクトであり、コンストラクターは一意であることが保証されているシンボルプリミティブ(シンボル値または単にシンボル)を返します。
シンボルは、他のコードがオブジェクトに追加する可能性のあるキーと衝突しないように、また、他のコードがオブジェクトにアクセスするために通常使用するメカニズムから隠されるるように、一意のプロパティキーをオブジェクトに追加するためによく使用されます。

const mySymbol = Symbol("myKey");

const obj = {
  [mySymbol]: "シンボルの値",
  normalKey: "通常の値"
};

console.log(obj[mySymbol]); // "シンボルの値"
console.log(obj.normalKey); // "通常の値"

// シンボルキーは通常のループで取得できない
for (let key in obj) {
  console.log(key); // "normalKey" だけが表示される(Symbolキーは表示されない)
}

console.log(Object.keys(obj)); // ["normalKey"]
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(myKey)]