문서의 이전 판입니다!
ECMAScript 2015에서부터 symbol은 number와 string과 같은 기본 데이타 타입(primitive data type)이 되었다.
symbol값들은 Symbol이라는 생성자를 호출하여 생성된다.
let sym1 = Symbol(); let sym2 = Symbol("key"); // string "key"는 optional입니다.
Symbol은 변경 불가능하며 고유합니다.
let sym2 = Symbol("key"); let sym3 = Symbol("key"); sym2 === sym3; // false, symbols are unique
string과 마찬가지로 symbol을 객체 프로퍼티의 키로 사용할 수 있습니다.
let sym = Symbol(); let obj = { [sym]: "value" }; console.log(obj[sym]); // "value"
Symbol을 계산된 프로퍼티 선언과 결합하여 객체 프로퍼티와 클래스 멤버를 선언할 수도 있습니다.
const getClassNameSymbol = Symbol(); class C { [getClassNameSymbol](){ return "C"; } } let c = new C(); let className = c[getClassNameSymbol](); // "C"
사용자 정의 Symbol 외에도 잘 알려진 내장 Symbol이 있습니다. 내장 Symbol는 언어 내부 동작을 나타내는 데 사용됩니다.
다음은 잘 알려진 Symbol 목록입니다.
Symbol.hasInstance
생성자 객체가 생성자의 인스턴스 중 하나로서 객체를 인식하는지 여부를 결정하는 메서드입니다. instanceof 연산자의 의미에 의해 호출됩니다.
Symbol.isConcatSpreadable
객체가 Array.prototype.concat에 의해 배열 요소로 병합되어야 함을 나타내는 부울 값입니다.
Symbol.iterator
객체의 기본 반복자를 반환하는 메서드입니다. for-of 구문의 의미에 의해 호출됩니다.
Symbol.match
문자열과 비교하는 정규 표현식 메서드입니다. String.prototype.match 메서드에 의해 호출됩니다.
Symbol.replace
일치하는 문자열의 부분 문자열을 대체하는 정규 표현식 메서드입니다. String.prototype.replace 메서드에 의해 호출됩니다.
Symbol.search
일치하는 문자열 내에서 인덱스를 반환하는 정규 표현식 메서드입니다. String.prototype.search 메서드에 의해 호출됩니다.
Symbol.species
파생된 객체를 만드는 데 사용되는 생성자 함수의 함수값을 갖는 프로퍼티입니다.
Symbol.split
일치하는 인덱스에서 문자열을 분할하는 정규 표현식 메서드입니다. String.prototype.split 메서드에 의해 호출됩니다.
Symbol.toPrimitive
객체에 대응하는 Primitive로 변환하는 메소드입니다. ToPrimitive 추상 동작에 의해 호출됩니다.
Symbol.toStringTag
객체의 기본 문자열 Tag를 만드는데 사용되는 String 값입니다. 내장 메소드 Object.prototype.toString에 의해 호출됩니다.
Symbol.unscopables
자신의 프로퍼티 명을 가지는 객체는 관련된 객체의 ‘with’ 환경 바인딩에서 제외되는 속성 이름입니다.
(Javascript에서 가져옴. Typescript확인필요)
객체 리터럴 {…}을 사용해 객체를 만든 경우, 대괄호를 사용해 심볼형 키를 만들어야 합니다.
let id = Symbol("id"); let user = { name: "John", [id]: 123 // "id": 123은 안됨 };