javascript 심볼(Symbol)
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() 메소드를 통해 가져올 수 있습니다.
+
https://justmakeyourself.tistory.com/entry/javascript-object-key-symbol
'JavaScript' 카테고리의 다른 글
[JavaScript] 입력한 숫자에 따라 배열을 생성하는 함수 만들기 (0) | 2023.03.31 |
---|---|
[Javascript] 객체(object)의 키(key)와 값(value)을 배열로 얻기 (0) | 2023.03.27 |
[JavaScript] switch 와 return (0) | 2023.03.03 |
[JS/HTML] DOM이란? (DOM 트리) (0) | 2022.06.02 |
[JS] <script> 태그의 defer, async 속성 (0) | 2022.06.02 |