[TIR] 심볼(Symbol)

Jenna·2021년 1월 13일
2

TIR

목록 보기
2/4
post-thumbnail

6개의 타입(자료형)을 가지고 있던 ECMAScript에 새롭게 생긴 7번째 타입인 심볼에 대해 복습해봅시다.

Symbol이란?

  • 어플리케이션 전체에서 유일
  • 변경 불가능한(immutable) 기본 자료형(primitive) 값
  • 주로 객체의 프로퍼티 키(property key)로 사용
  • 유일한 식별자(unique identifier)를 만들고 싶을 때 사용

Symbol의 특징

심볼은 Symbol형식의 반환 값을 가지며 내장 객체(built-in objects)의 여러 멤버를 가르키는 정적 프로퍼티와 전역 심볼 레지스트리(global symbol registry)를 가리키는 정적 메서드를 가집니다. "new Symbol()" 문법을 지원하지 않아 생성자 측면에서는 불완전한 내장 객체 클래스(built-in object class)와 유사합니다.

JS의 7타입

  • 원시 데이터형(primitive data type)
    • 객체가 아니면서 메서드도 가지지 않는 데이터
    • 종류 : string, number, bigint, boolean, undefined, symbol
  • 객체형(Object type)
    • 데이터 및 데이터 작업에 대한 지침을 포함하는 데이터 구조
    • 종류 : object

Symbol의 예제

Symbol Constructor

const s1 = Symbol();
const s2 = Symbol(113);
const s3 = Symbol('jenna');
const s4 = new Symbol(); // Error: Symbol is not a constructor
const o = Object(s1);

console.log(s1); //Symbol()
console.log(typeof s1); //"symbol"
console.log(s2 === 113); // false
console.log(s3.toString()); // "Symbol(jenna)"
console.log(Symbol('jenna') === Symbol('jenna'));// false
console.log(typeof o); //"object"

Symbol for...in

const obj = {};

obj[Symbol("a")] = 1;
obj[Symbol.for("b")] = 2;
obj["c"] = 3;
obj.d =4;

for (let o in obj) {
   console.log(o); // "c" "d"
}

console.log(Object.getOwnPropertySymbols(obj)); //Array [Symbol(a), Symbol(b)]

Symbol wrapper object

const obj = {};
const s = Symbol('hehe');
obj[s] = 1;

console.log(obj); // { [Symbol(hehe)]: 1 }
console.log(obj[s]); // 1

const sym = Symbol('hi');
const o = {[sym]: 1};
console.log(o[sym]); // 1
console.log(o[Object(sym)]); // 1

이렇게 심볼에 대해 알아보았습니다.
즐거운 하루되세요! 앗농!🙋🏻‍♀️

[출처]MDN-Symbol

profile
언제나 '제나'🌈 '제'일 '나'다운 기록🖊

0개의 댓글