Symbol()은 매번 다르고 Symbol.for()는 registry를 공유합니다. Object.keys와 JSON에는 보이지 않습니다.
Symbol·Map·Set 선택 기준
Symbol은 충돌 없는 속성 키, Map은 key identity 기반 저장소, Set은 SameValueZero 중복 제거에 맞춥니다.
01Symbol()
02map.set/get
03set.add/has
04WeakMap
객체, 함수, NaN을 키로 쓰고 삽입 순회가 필요하면 Map입니다. map[key]가 아니라 map.get(key)를 씁니다.
Set은 SameValueZero로 중복을 판단해 NaN은 하나로 합치지만 객체는 참조가 다르면 다른 값입니다.
DOM 노드 메타데이터처럼 key 객체가 사라질 때 같이 회수되어야 하면 WeakMap을 검토합니다.