Symbol.for()

전역심볼

    전역변수처럼 이름이 같으면 같은 객체를 가르켜야할 때 사용 하나의 심볼만 보장받을 수 있다. 없으면 만들고, 있으면 가져오기 때문이다. Symbol 함수는 매번 다른 Symbol 값을 생성하지만, Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유한다.
const dk1 = Symbol.for('dk');
const dk2 = Symbol.for('dk');
console.log( dk1 === dk2 ); // true


Symbol.keyFor()

전역심볼의 이름을 얻는 방법

Symbol.keyFor(dk1);

console.log(Symbol.keyFor(dk1)); // dk


description

전역심볼이 아닌 심볼의 이름을 얻는 방법

const id = Symbol('idd')
const user = {
    name : "adidas",
    age : 30,
    [id] : "adidas id",
}
console.log(id.description); // idd


Object.getOwnPropertySymbols

숨겨진 Symbol key 보는 법

const id = Symbol('idd')
const user = {
    name : "adidas",
    age : 30,
    [id] : "adidas id",
}

console.log(Object.getOwnPropertySymbols(user)); // Symbol(idd)

Reflect.ownKeys()

숨겨진 Symbol을 포함해서 객체의 모든 key 보는 법

const id = Symbol('id')
const user = {
    name : "Mike",
    age : 20,
    [id] : "idid",
}

console.log(Reflect.ownKeys(user)); // ["name", "age", Symbol(id)]

별로 사용 안함


Symbol 예문

다른 개발자가 만들어 놓은 객체

const sb = {
    name : 'soobin',
    age : 29,
};

사용자가 접속하면 보는 메세지

for (let key in sb){
    console.log(`Her ${key} is ${sb[key]}`);
}

일 때, 내가 작업하기 위해서

sb.showName = function(){};

와 같이 추가한다면 사용자가 보는 메세지에서

    Her name is soobin
    Her age is 29
    Her showName is function(){}

와 같이 나타난다.

따라서

const showName = Symbol("show name");
sb[showName] = function() {
    console.log(this.name);
}

sb[showName]();

처럼 Symbol을 사용하면 자신이 작성한 메소드도 작동하면서 다른 개발자가 만들어 놓은 코드에도 영향을 미치지 않는다.

댓글남기기