JavaScriptシンボル構成部品


参考資料:https://www.youtube.com/watch?v=E9uCNn6BaGQ
参考資料:https://poiemaweb.com/es6-symbolpropertyを定義すると
const obj = {
  1     : 'one',
  false : 'boolean'
}

Object.keys(obj); // ["1" , "false"]

obj['1'] // "one"
obj['false'] // "boolean"
使用後にObjectを使用して値をロードすることができ、
記号で定義できます.

📌 Symbol


Symbolは一意の識別子を作成するために使用され、変更できない元のタイプの値です.
構成部品は、主に名前の競合のリスクのない唯一のオブジェクトを作成するpropertyキー(property key)に使用されます.Symbolが生成すると、let symbol = Symbol();この方法では、newは使用されない.
const a = Symbol();
const b = Symbol();

console.log(typeof a); // symbol
console.log(typeof b); // symbol

console.log(a) // Symbol()
console.log(b) // Symbol()

console.log(a===b) // false
const id = Symbol('id');

📌 Symbol一意値


Symbol値は一意の値であるため、Symbol値をキーとしたPropertyは他のPropertyと競合しません.
const id  = Symbol('id');
const id2 = Symbol('id');

console.log(id); // Symbol(id)
console.log(id2); // Symbol(id)
出力は同じです.では、二つを比較するとどうなるのでしょうか.
const id  = Symbol('id');
const id2 = Symbol('id');

console.log(id); // Symbol(id)
console.log(id2); // Symbol(id)

console.log(id===id2); // false
console.log(id===id2); // false

📌 コンポーネントをオブジェクトとして使用するキー

import { log } from 'console';

const id = Symbol('id');
const user = {
  name : 'ash',
  age : 3,
  [id] : 'myid',
}

log(user);
// { name: 'ash', age: 3, [Symbol(id)]: 'myid' }

Object.keys(user); // ["name" , "age"]
idには値は出力されません.同様に、身長がSymbolであればスキップできます.