반응형
ES6에서 새로 추가된 자료형인 심볼(symbol) 타입은 Symbol() 함수를 통해 할당받을 수 있습니다. new Symbol()을 통한 호출은 TypeError가 발생합니다.
Symbol()로부터 반환되는 모든 값을 고유하며, 객체 프로퍼티에 대한 식별자(Key)로 주로 사용됩니다. 문서에는 이것이 심볼 데이터의 유일한 목적이라고 설명되어 있습니다.
console.log(Symbol('string') === Symbol('string')); // false
console.log(Symbol() === Symbol()); // false
console.log(Symbol() == Symbol()); // false
console.log(typeof Symbol()); // symbol
Symbol('string') 코드는 'string'이라는 문자열을 심볼로 변환시키지 않으면서 고유한 값을 생성합니다.
const language = Symbol('language');
const age = Symbol('age');
const programmer = {
name: 'john'
};
programmer[language] = 'javascript';
programmer[age] = 27;
console.log(programmer[language]); // javascript
console.log(programmer[age]); // 27
for(let key in programmer)
console.log(key);
// name
console.log(Object.keys(programmer)); // Array(1) ["name"]
console.log(JSON.stringify(programmer)); // ["name":"john"]
const ownPropertySymbols = Object.getOwnPropertySymbols(programmer);
console.log(ownPropertySymbols); // Array(2) [Symbol(language), Symbol(age)]
for(let symbol in ownPropertySymbols)
console.log([programmer[ownPropertySymbols[symbol]]]);
/*
Array(1) ["javascript"]
Array(1) [27]
*/
심볼은 객체의 키로 접근시킬 수 있습니다.
단, 심볼의 고유한 값은 직접적으로 할당시킬 수 없기 때문에 객체의 키로 사용하려면 참조를 따로 변수에 담아서 접근할 때마다 사용해야 합니다.
그리고 객체의 키가 심볼이면 for-in 루프 또는 Object.keys() 메소드를 통해 가져올 수 없습니다.
JSON.stringify 메소드로 JSON 문자열 변환을 시켜도 심볼 키는 제외됩니다.
객체의 키로 사용된 심볼들을 가져오려면 Object.getOwnPropertySymbols() 메소드를 통해 가져올 수 있습니다.
반응형
'웹프로그래밍 > javascript' 카테고리의 다른 글
javascript let 선언 이해하기 (0) | 2020.02.01 |
---|---|
javascript 객체, 배열 비구조화 할당 (0) | 2020.01.30 |
자바스크립트(javascript) 객체란 무엇인가? (0) | 2020.01.27 |
자바스크립트(javascript) 비교 연산자 (0) | 2020.01.25 |
자바스크립트(javascript) 템플릿 문자열(template strings) 알아보기 (0) | 2020.01.25 |