property key: 문자형

const obj = {

     1 : '1입니다.'

     false : '거짓'

}

Object.keys(obj) ;   ["1", "false"]  → 키값이 다 문자형임.

 

----------------------------------------------------------------------------------------

<심볼(Symbol)형>

'유일한 식별자'를 만듬.

const a = Symbol();       //new를 붙이지 않는다.

const b = Symbol();

 

console.log(a)      //Symbol()

console.log(b)      //Symbol()

 

a === b ;   //false

a == b;      //false

 

유일성 보장 

const id = Symbol('id');    // 설명을 붙여줄 수 있음(문자열로 - 심볼 생성에는 영향x)

const id2 = Symbol('id');       // id !== id2,  id !===id2

   

property key : 심볼형

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

 object를 찍어보면 symbol형을 가진 키값은 모두 건너고 반환됨.

→ Object.keys(user);      //["name", "age"]

    Object.values(user);        //["Mike", 30]

    Object.entries(user);        //[Array(2), Array(2)] 

Symbol 쓰임

  -특정 위치에 원본을 건드리지 않고 추가할 수 있다.

    const user = {
     name : 'Mike',
     age : 30
   }
          ↑
const id = Symbol('id');
user[id] = 'myid';

 

user.name = 'myname' ; (x)

user.a_key_no_one_user = 'hahaha' ; (x)

 

Symbol.for() : 전역 심볼

  -하나의 심볼만 보장받을 수 있음.

  -없으면 만들고, 있으면 가져오기 때문

  -Symbol함수는 매번 다른 Symbol값을 생성하지만

  -Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유

   const id1 = Symbol.for('id');

   const id2 = Symbol.for('id');

    id1 === id2;  true

    Symbol.keyFor(id1)   //"id"  -id1의 이름을 알 수 있음. 

 

●description

   const id = Symbol('id 입니다.');

   id.description;    //"id 입니다." -id의 이름 알 수 있음.

 

●숨겨진 Symbol Key 보는 법

   const id = Symbol('id');

   const user = {

         name : 'Mike',

         age: 30,

         [id] : 'myid'

    }

Object.getOwnPropertySymbols(user);    

Reflect.ownKeys(user);

 

//다른 개발자가 만들어 놓은 객체
const user = {
  name : "Mike",
  age : 30,
};
//나의 작업
const showName = Symbol('show name');
user[showName] = function(){
  console.log(this.name);
};

user[showName]();

//사용자가 접속하면 보는 메세지
for (let key in user){
  console.log(`His ${key} is ${user[key]}.`);
}

 

 

 

 

 

 

 

 

반응형

+ Recent posts