Symbol
- プロパティの重複を避けるために、必ず一意の値を返す関数。
- Symbolというプリミティブのデータ型
- Symbol('名前をつけることができる。')
case1
一意の値を返すとはなにか?
const s1 = Symbol('hello');
const s2 = Symbol('hello');
//コンソール上は同じ出力となる。
console.log(s1) >> Symbol(hello)
console.log(s2) >> Symbol(hello)
//しかし、内部的には違うものとなる。
console.log(s1 === s2) >>>false
case2
どのような時に使うのか?
ES5からES6にupdateする時に、既存のコードが新しいバージョンと重複せずに動作することを目的に作られた。
- 例えば、Stringに新しいメソッドを追加したい場合にSymbolを使用して一意のメソッドを追加することができる。
- シンボルを登録するときはブラケット記法[]となる。
- 登録したメソッドを使用するときは
関数名[シンボル変数]()
となる。
const s1 = Symbol('hello');
String.prototype[s1] = function() {
return 'hello ' + this;
}
const tom = 'Tom';
console.log(tom[s]());