Symbol(심벌)

Jayden ·2023년 3월 23일
0

1) Symbol

  • 1997년 자바스크립트가 ECMAScript로 표준화된 이래로 자바스크립트에는 6개의 타입.
    즉, 문자열, 숫자, boolean, null, object 타입
  • Symbol은 변경 불가능한 원시 타입의 값, 다른 값과 중복되지 않는 유일무이한 값이다.
  • 주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용

2) 심벌 값의 생성

(1) Symbol 함수

함수를 호출하여 생성하며, 이때 생성된 심벌 값은 외부로 노출되지 않아 확인할 수 없으며. 다른 값과 절대 중복되지 않는 유일무이한 값이다.


// Symbol 함수를 호출하여 유일무이한 심벌 값을 생성
const mySymbol = Symbol();
console.log(typeof mySymbol); //symbol

Symbol 함수에는 선택적으로 문자열을 인수로 전달할 수 있다. 이 문자열은 생성된 심벌 값에 대한 설명으로 디버깅 용도로만 사용되며, 심벌값 생성에 어떠한 영향도 주지 않는다. 즉, 심벌값에 대한 설명이 같더라도 심벌은 유일 무이한 값이다.

//심벌 값에 설명이 같더라도 유일무이한 심벌 값을 생성한다.

const mySymbol1 = symbol('mysymbol');
const mySymbol2 = symbol('mysymbol');


console.log(mySymbol1 === mySymbol2); //false

심벌 값도 문자열 숫자, 불리언과 같이 객체처럼 접근하면 암묵적으로 래퍼 객체를 생성한다.
description 프로퍼티와 toString 메소드는 Symbol.prototype의 프로퍼티이다.


const mySymbol = Symbol('mySymbol');

console.log(mySymbol.description); //mySymbol
console.log(mySymbol.toString()); //Symbol(mySymbol)

심벌 값은 암묵적으로 문자열이나 숫자 타입으로 변환되지 않는다.

const mySymbol = Symbol();

console.log(mySymbol + '');
console.log(+mySymbol);

단, 불리언 타입으로는 암묵적으로 변형된다.

const mySymbol = Symbol();

console.log(!mySymbol); //false
 
console.log(!!mySymbol); //true

if(mySymbol)
  console.log('mySymbol is not empty');

출처 : 모던 자바스크립트 Deep Dive

profile
J-SONE 프론트엔드 개발자

0개의 댓글