seunghyun Note
33장 (Symbol) 본문
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 |