심벌이란 ES6에서 도입된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값이다.
⇒ 주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용한다.
// Symbol 함수를 호출하여 유일무이한 심벌 값을 생성
const mySymbol = **Symbol();**
console.log(typeof mySymbol); // **symbol**
//생성된 심벌 값은 외부로 노출되지 않아 확인할 수 없다.
console.log(mySymbol); // **Symbol()**
Symbol 함수는 다른 생성자 함수들과 달리 new 연산자와 함께 호출하지 않는다.
new 연산자와 함께 생성자 함수 또는 클래스를 호출하면 객체(인스턴스)가 생성된다.
⇒ 하지만 심벌 값은 변경 가능한 객체가 아닌 유일무이한 값이다
Symbol 함수에는 선택적으로 문자열을 인수로 전달할 수 있다.
심벌 값 생성에 어떠한 영향도 주지 않는다.
⇒ 심벌 값에 대한 설명이 같더라도 생성된 심벌 값은 유일무이한 값이다.
// 심벌 값에 대한 설명이 같더라도 유일무이한 심벌 값을 생성한다.
const mySumbol1 = **Symbol('mySymbol');**
const mySymbol2 = **Symbol('mySymbol');**
console.log(**mySymbol1 === mySymbol2**); // **false**
심벌 값도 객체처럼 접근하면 암묵적으로 래퍼 객체를 생성한다.
const mtSymbol = Symbol('mySymbol');
// 심벌도 래퍼 객체를 생성한다.
// decription 프로퍼티와 toString 메서드는 Symbol.prototype의 프로퍼티다.
console.log(**mySymbol.description**); // **mySymbol**
console.log(**mySymbol.toString()**); // **Symbol(mySymbol)**
const mySymbol = Symbol();
// 심벌 값은 암묵적으로 문자열이나 숫자 타입으로 변환되지 않는다.
console.log(mySymbol + ''); // TypeError: Cannot convert a Symbol value to a string
coneole.log(+mySymbol); // TypeError: Cannot convert a Symbol value to a number