seunghyun Note

33장 (Symbol) 본문

스터디/모던자바스크립트 deep dive

33장 (Symbol)

승숭슝현 2024. 1. 9. 16:28
728x90
반응형

Symbol 심벌은 ES6에서 도입된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값이다

심벌 값의 생성

심벌 값은 Symbol 함수를 호출하여 생성한다. 다른 원시값은 리터럴 표기법을 통해 생성할 수 있지만 심벌 값은 Symbol 함수를 호출하여 생성해야 한다. 또한 new 연산자와 함께 호출하지 않는다. 즉, 생성자 함수로 객체를 생성하지 않는다.


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

// 심벌 값은 외부로 노출되지 않아 확인할 수 없다.
console.log(mySymbol);        // Symbol()

// new 생성자로 생성 불가
new Symbol(); // TypeError: Symbol is not a constructor

심벌 값에 대한 설명이 같더라도 생성된 심벌 값은 유일무이한 값이다.

// 심벌 값에 대한 설명이 같더라도 유일무이한 심벌 값을 생성한다.
const mySymbol1 = Symbol('mySymbol');
const mySymbol2 = Symbol('mySymbol');

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

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

const mySymbol = Symbol();

// 심벌 값은 암묵적으로 문자열이나 숫자 타입으로 변환되지 않는다.
console.log(mySymbol + ''); // TypeError: Cannot convert a Symbol value to a string
console.log(+mySymbol);     // TypeError: Cannot convert a Symbol value to a string

단, 불리언 타입으로는 암묵적으로 타입 변환된다. 이를 통해 if 문 등에서 존재 확인이 가능하다.

const mySymbol = Symbol();

// 불리언 타입으로는 암묵적으로 타입 변환된다.
console.log(!!mySymbol); // true

// if 문 등에서 존재 확인을 위해 사용할 수 있다.
if (mySymbol) console.log('mySymbol is not empty.');
728x90
반응형

'스터디 > 모던자바스크립트 deep dive' 카테고리의 다른 글

35장 (스프레드 문법)  (0) 2024.01.09
34장 (이터러블)  (0) 2024.01.09
32장 (String)  (0) 2024.01.09
31장 (RegExp)  (1) 2024.01.09
30장 (Date)  (0) 2024.01.09