다른 값과 중복되지 않는 유일무이한 값
: 다른 원시값들과 다르게 symbol 함수를 호출해야만 값을 생성할 수 있음
33-01
// Symbol 함수를 호출하여 유일무이한 심벌 값을 생성한다.
const mySymbol = Symbol();
console.log(typeof mySymbol); // symbol
// Symbol 값은 외부로 노출되지 않아 확인할 수 없다
console.log(mySymbol); // Symbol()
33-03
// 심벌 값에 대한 설명이 같더라도 유일무이한 심벌 값을 생성한다.
const mySymbol1 = Symbol('mySymbol');
const mySymbol2 = Symbol('mySymbol');
console.log(mySymbol1 === mySymbol2); // false
33-04
const mySymbol = Symbol('mySymbol');
// 심벌도 래퍼 객체를 생성한다
console.log(mySymbol.description); // mySymbol
console.log(mySymbol.toString()); // Symbol(mySymbol)
======================================================
강의예제
const a = Symbol('a');
const b = Symbol('b');
a; // Symbol('a')
a.description; // a
a.toString(); // 'Symbol(a)'
33-05
const mySymbol = Symbol();
// 심벌 값은 암묵적으로 문자열이나 숫자 타입으로 변환되지 않는다.
console.log(mySymbol + ''); // TypeError: Cannot conver a Symbol value to string
console.log(+mySymbol); // TypeError: Cannot conver a Symbol value to number
33-06
const mySymbol = Symbol();
// 불리언 타입으로는 암묵적으로 타입 변환된다.
console.log(!!mySymbol); // true
// if문 등엣 존재 확인이 가능하다
if (mySymbol) console.log('mySymbol is not empty');
Symbol은 유일무이한 값이기 때문에 똑같아 보여도 다름
강의 예제1)
const a = Symbol('a');
const b = Symbol('a');
a; // Symbol(a)
b; // Symbol(a)
a === b // false
a.description === b.description // true