ES6(Symbol)

はじめに

 Symbolという言葉の定義から確認しましょう。
Symbol・・・プロパティの重複を避けるために、必ず一意の値を返す関数

Symbol の使い方、注意点

①Symbolの定義方法

const s = Symbol()
console.log(s); //Symbol()

②言葉の定義の意味

const s = Symbol("string");
const s2 = Symbol("string");
console.log(s === s2); //false

③Symbolはプリミティブ型の一つ

const s = Symbol("string");
console.log(typeof s); //symbol

Symbolの使い道

自己開発しているオブジェクトでSymbolを利用するケースはほとんどないようですが、メソッドをシンボルで識別することにより、メソッド名の重複を気にすることなく、拡張が可能となります。
以下例で確認しましょう。

const s = Symbol("hello");
const str = new String("Tom");
String.prototype[s] = function () {
  return `hello ${this}`;
};
console.log(str); //String {"Tom"}

const tom = "Tom";
console.log(tom[s]()); //hello Tom

部分部分でコードを解説していきます。
まずnew Stringですが

const str = new String();
console.log(str);

コンソール上で確認すると、String>>__prote__>>Symbol.iteratorが存在します。ここに一意の関数を格納していくイメージです。

const s =Symbol('hello');
const str = new String('Tom');
String.prototype[s] = function () {
  return `hello ${this}`
}
console.log(str);

ここまでをコンソール上で見てみると、String>>__prote__>>Symbol(hello)が生成されています。


以上まとめると、Symbolとは既存で動いているコードを破壊しないために導入された一意の値を得るためのプロパティ識別子です。