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
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 ( 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 ( ) | ||
---|---|---|
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)