Symbol【ローカルシンボル生成 (一意)】関数
[ @@toPrimitive ]【プリミティブ値取得】
for【グローバルシンボル生成】
keyFor【キー取得 (グローバルシンボル)】
toString【文字列変換】
valueOf【値取得】
Symbol【ローカルシンボル生成 (一意)】関数
メモ
概要
- ローカルシンボルの生成関数
- 呼び出し毎に、一意シンボル生成
関連
外部リンク
- ECMA-262 (英語)
Symbol ( [ description ] ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
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【プリミティブ値取得】
メモ
概要
- プリミティブ値の取得
- 通常、必要時に自動的に呼び出し
関連
外部リンク
- ECMA-262 (英語)
Symbol.prototype [ @@toPrimitive ] ( hint ) ES2024 (15) ES2023 (14) ES2022 (13) Symbol.prototype.valueOf ( ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
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【キー取得 (グローバルシンボル)】
メモ
概要
- グローバルシンボル生成
- グローバル シンボル レジストリに既存のシンボルがあれば、既存シンボル使用
- レジストリになければ、レジストリに新たに生成
- キーが同じであれば、同一シンボル
- キー取得 (グローバルシンボル)
- グローバル シンボル レジストリに既存のシンボルがあれば、該当キー返却
- ローカルシンボル・ビルトイン シンボルは、対象外
関連
外部リンク
- ECMA-262 (英語)
Symbol.for ( key ) ES2024 (15) ES2023 (14) ES2022 (13) Symbol.keyFor ( sym ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
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【文字列変換】
メモ
概要
- シンボルを文字列に変換
関連
外部リンク
- ECMA-262 (英語)
Symbol.prototype.toString ( ) ES2024 (15) ES2023 (14) ES2022 (13)
構文
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)