Symbol【ローカルシンボル生成 (一意)】関数
[ @@toPrimitive ]【プリミティブ値取得】
for【グローバルシンボル生成】
keyFor【キー取得 (グローバルシンボル)】
toString【文字列変換】
valueOf【値取得】

Symbol【ローカルシンボル生成 (一意)】関数

メモ

概要

  • ローカルシンボルの生成関数
    • 呼び出し毎に、一意シンボル生成

関連

外部リンク (英語)

Symbol ( [ description ] )
ES2022 (13) ES2021 (12) ES2020 (11)

構文

Symbol( [description] )

 (Symbol) ローカルシンボル (一意)
description 説明文 (文字列変換)

TypeError 例外 new ありで呼び出し

const sym1 = Symbol();
console.log(sym1);
// 出力:Symbol()
const sym2 = Symbol();
console.log(sym2);
// 出力:Symbol()
console.log(sym1 === sym2);
// 出力:false

const sym3 = Symbol('SAME');
console.log(sym3);
// 出力:Symbol("SAME")
const sym4 = Symbol('SAME');
console.log(sym4);
// 出力:Symbol("SAME")
console.log(sym3 === sym4);
// 出力:false

// const sym9 = new Symbol();
// TypeError: Symbol is not a constructor

// Symbol.for【グローバルシンボル生成】 (参考)
const symA = Symbol.for('SAME_GLOBAL');
console.log(symA);
// 出力:Symbol("SAME_GLOBAL")
const symB = Symbol.for('SAME_GLOBAL');
console.log(symB);
// 出力:Symbol("SAME_GLOBAL")
console.log(symA === symB);
// 出力:true

Symbol.prototype [ @@toPrimitive ]【プリミティブ値取得】
Symbol.prototype.valueOf【プリミティブ値取得】

メモ

概要

  • プリミティブ値の取得
    • 通常、必要時に自動的に呼び出し

関連

外部リンク (英語)

20.4.3.5 Symbol.prototype [ @@toPrimitive ] ( hint )
ES2022 (13) ES2021 (12) ES2020 (11)
Symbol.prototype.valueOf ( )
ES2022 (13) ES2021 (12) ES2020 (11)

構文

Symbol[ Symbol.toPrimitive ]( hint )

 プリミティブ値
hint ヒント
Symbol.valueOf( )

 プリミティブ値

const sym1 = Symbol();
console.log(sym1);
// 出力:Symbol()
console.log(sym1[Symbol.toPrimitive]());
// 出力:Symbol()
console.log(sym1.valueOf());
// 出力:Symbol()

const sym2 = Symbol('Desc2');
console.log(sym2);
// 出力:Symbol("Desc2")
console.log(sym2[Symbol.toPrimitive]());
// 出力:Symbol("Desc2")
console.log(sym2.valueOf());
// 出力:Symbol("Desc2")

const sym3 = Symbol.for('Key3');
console.log(sym3);
// 出力:Symbol("Key3")
console.log(sym3[Symbol.toPrimitive]());
// 出力:Symbol("Key3")
console.log(sym3.valueOf());
// 出力:Symbol("Key3")

console.log(Symbol.match);
// 出力:Symbol("Symbol.match")
console.log(Symbol.match[Symbol.toPrimitive]());
// 出力:Symbol("Symbol.match")
console.log(Symbol.match.valueOf());
// 出力:Symbol("Symbol.match")

console.log(Symbol.toPrimitive);
// 出力:Symbol("Symbol.toPrimitive")
console.log(Symbol.toPrimitive[Symbol.toPrimitive]());
// 出力:Symbol("Symbol.toPrimitive")
console.log(Symbol.toPrimitive.valueOf());
// 出力:Symbol("Symbol.toPrimitive")

Symbol.for【グローバルシンボル生成】
Symbol.keyFor【キー取得 (グローバルシンボル)】

メモ

概要

  • グローバルシンボル生成
    • グローバル シンボル レジストリに既存のシンボルがあれば、既存シンボル使用
    • レジストリになければ、レジストリに新たに生成
    • キーが同じであれば、同一シンボル
  • キー取得 (グローバルシンボル)
    • グローバル シンボル レジストリに既存のシンボルがあれば、該当キー返却
    • ローカルシンボル・ビルトイン シンボルは、対象外

関連

外部リンク (英語)

Symbol.for ( key )
ES2022 (13) ES2021 (12) ES2020 (11)
Symbol.keyFor ( sym )
ES2022 (13) ES2021 (12) ES2020 (11)

構文

Symbol.for( key ) 

 グローバルシンボル
key キー (文字列変換)
Symbol.keyFor( sym ) 

 (String) キー (undefined:なし)
sym (Symbol) シンボル

TypeError 例外 sym (シンボル)がシンボル以外

const sym1 = Symbol.for('Key');
console.log(sym1);
// 出力:Symbol("Key")
const sym2 = Symbol.for('Key');
console.log(sym2);
// 出力:Symbol("Key")
console.log(sym1 === sym2);
// 出力:true

console.log(Symbol.keyFor(sym1));
// 出力:Key
console.log(Symbol.keyFor(sym2));
// 出力:Key

// ローカルシンボル (参考)
const sym3 = Symbol('Key');
console.log(sym3);
// 出力:Symbol("Key")
const sym4 = Symbol('Key');
console.log(sym4);
// 出力:Symbol("Key")
console.log(sym3 === sym4);
// 出力:false

console.log(Symbol.keyFor(sym3));
// 出力:undefined
console.log(Symbol.keyFor(sym4));
// 出力:undefined

// ビルトイン シンボル (参考)
console.log(Symbol.keyFor(Symbol.match));
// 出力:undefined
console.log(Symbol.keyFor(Symbol.search));
// 出力:undefined

Symbol.prototype.toString【文字列変換】

メモ

概要

  • シンボルを文字列に変換

関連

外部リンク (英語)

Symbol.prototype.toString ( )
ES2022 (13) ES2021 (12) ES2020 (11)

構文

Symbol.toString( )

 シンボル文字列

const sym1 = Symbol();
console.log(sym1);
// 出力:Symbol()
console.log(sym1.toString());
// 出力:Symbol()
console.log(String(sym1));  // (参考)
// 出力:Symbol()

const sym2 = Symbol('Desc2');
console.log(sym2);
// 出力:Symbol("Desc2")
console.log(sym2.toString());
// 出力:Symbol(Desc2)
console.log(String(sym2));  // (参考)
// 出力:Symbol(Desc2)

const sym3 = Symbol.for('Key3');
console.log(sym3);
// 出力:Symbol("Key3")
console.log(sym3.toString());
// 出力:Symbol(Key3)
console.log(String(sym3));  // (参考)
// 出力:Symbol(Key3)

console.log(Symbol.match);
// 出力:Symbol("Symbol.match")
console.log(Symbol.match.toString());
// 出力:Symbol(Symbol.match)
console.log(String(Symbol.match));  // (参考)
// 出力:Symbol(Symbol.match)

console.log(Symbol.toPrimitive);
// 出力:Symbol("Symbol.toPrimitive")
console.log(Symbol.toPrimitive.toString());
// 出力:Symbol(Symbol.toPrimitive)
console.log(String(Symbol.toPrimitive));  // (参考)
// 出力:Symbol(Symbol.toPrimitive)