Symbol
심볼은 ES2015에서 도입된 새로운 원시 타입입니다.
Symbol
내장 함수를 통해 새 심볼을 생성할 수 있습니다.
const sym = Symbol();
console.log(typeof sym); // symbol
console.log(sym); // Symbol()
Symbol
함수에 문자열을 넘겨서, 해당 심볼에 대한 설명을 포함한 심볼을 생성할 수 있습니다.
이 때 넘겨지는 문자열은 그저 심볼의 설명일 뿐이므로, 심볼의 비교 연산에 영향을 주지 않습니다.
즉, 어떤 문자열이 인수열에 들어오는 지와 상관없이 새로 생성된 심볼은 다른 모든 심볼과 다른 것으로 취급됩니다.
console.log(Symbol('my symbol')); // Symbol(my symbol)
console.log(Symbol('my symbol') === Symbol('my symbol')); // false
console.log(Symbol() === Symbol()); // false
심볼은 객체의 속성 키로 사용하기로 위해 만들어졌습니다. 아래와 같이 대괄호 표기법을 통해 심볼을 객체의 속성 키로 사용할 수 있습니다.
const mySymbol = Symbol('my symbol');
const obj = {
[mySymbol]: 'hello'
};
console.log(obj); // { [Symbol(my symbol)]: 'hello' }
내장 심볼(well-known symbol)을 객체의 속성 키로 사용하면, 특정 상황에서의 객체의 동작 방식을 마음대로 바꿀 수 있습니다.
Symbol.hasInstance
: 객체가instanceof
연산자의 피연산자로 왔을 때의 동작을 바꿉니다.Symbol.isConcatSpreadable
: 객체가Array.prototype.concat
메소드의 인수로 넘겨질 때의 동작을 바꿉니다.Symbol.iterator
: 객체가String.prototype.match
메소드의 인수로 넘겨질 때의 동작을 바꿉니다.Symbol.match
: 객체가String.prototype.match
메소드의 인수로 넘겨질 때의 동작을 바꿉니다.Symbol.replace
: 객체가String.prototype.replace
메소드의 인수로 넘겨질 때의 동작을 바꿉니다.Symbol.search
: 객체가String.prototype.search
메소드의 인수로 넘겨질 때의 동작을 바꿉니다.Symbol.species
:Array.prototype
을 상속받은 객체에 대해Array.prototype.map
등의 메세드를 호출할 때, 반환되는 객체의 생성자를 지정합니다.Symbol.split
: 객체가String.prototype.split
메소드의 인수로 넘겨질 떄의 동작을 바꿉니다.Symbol.toPrimitive
: 객체가 원시 타입의 값으로 변환되어야 할 때, 정확히 어떤 값으로 변환되어야 하는 지를 지정합니다.Symbol.toStringTag
:Object.prototype.toString()
메소드를 객체에 대해 직접 호출할 때의 동작을 바꿉니다.Symbol.unscopable
:with
블록 안에서 어떤 속성을 참조할 수 있는지를 지정합니다.
'DEV > NodeJS' 카테고리의 다른 글
ES2015 이해 - 문법과 기능 정리 (0) | 2020.10.02 |
---|---|
ES2015 - 분해대입 (Destructuring Assignment) (0) | 2020.10.02 |
ES2015 - 나머지 매개변수(Rest Parameters) (0) | 2020.09.15 |
ES2015 - 화살표 함수 (Arrow Function) (0) | 2020.09.15 |
ES2015 - 변수 (let, const) (0) | 2020.09.14 |