본문 바로가기

JavaScript

[Javascript] 심볼(Symbol) (feat. 객체 key)

javascript 심볼(Symbol) 

https://jsdevlog.tistory.com/entry/javascript-%EC%8B%AC%EB%B3%BCSymbol-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

javascript 심볼(Symbol) 알아보기

ES6에서 새로 추가된 자료형인 심볼(symbol) 타입은 Symbol() 함수를 통해 할당받을 수 있습니다. new Symbol()을 통한 호출은 TypeError가 발생합니다. Symbol()로부터 반환되는 모든 값을 고유하며, 객체 프

jsdevlog.tistory.com

 

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

 

객체의 키로 심볼 넣기

저번 포스팅에서 객체에 키(key)로는 문자열만 들어갈 수 있다고 말했습니다. 하지만 es6에 심볼이라는 원시 타입이 생기면서 객체의 키로 심볼도 들어갈 수 있게 되었습니다.객체의 키(key)로 심

justmakeyourself.tistory.com