ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 심볼 Symbol
    javascript 2023. 4. 9. 18:48
    반응형

    * 객체의 property key는 문자형으로 반환 가능

    const obj = {
        1 : "1입니다.",
        false : "거짓"
    }
    
    Object.keys(obj);//["1", "flase"] : 문자형으로 반환됨
    
    obj["1"]//"1입니다."
    obj["flase"]//"거짓"

    * 객체의 property key는 symbol형으로도 반환 가능

     

    - symbol은 유일한 식별자를 만들때 사용

    - symbol을 만들때 설명을 붙일수도 있음

    - symbol 함수는 매번 다른 symbol 값을 생성

    const a = Symbol();//new를 붙이지 않음
    const b = Symbol();
    
    console.log(a);//Symbol()
    console.log(b);//Symbol()
    
    a === b;//false
    a == b;//false 즉, 일치연산자 동등연산자 모두 false가 나옴 = 유일한 식별자를 만들때 사용함
    
    //---------------------------------------------------------------------------------------------
    const id = Symbol("id");
    const id02 = Symbol("id");//만약 설명이 똑같은 것을 또 만들게 된다면
    
    console.log(id);//Symbol(id)
    console.log(id02);//Symbol(id)
    
    id === id02;//false
    id == id02;//false
    
    //---------------------------------------------------------------------------------------------
    /*symbol을 객체의 키로 사용*/
    const id = Symbol("id");
    const user = {
        name : "Jin",
        age : 30,
        [id] : "myid",
    }
    
    console.log(user);//{name : "Jin", age : 30, Symbol(id) : "myid"}
    console.log(user[id]);//"myid"
    
    Object.keys(user);//["name", "age"]
    Object.values(user);//["Jin", 30]
    Object.entries(user);//[Array, Array]
    //키가 symbol형인 프로퍼티는 건너뜀
    
    /*이렇게 숨겨지는 기능은 특정 객체의 원본 데이터를 건드리지 않고 속성을 추가할 수 있음*/
    
    //-------------------------------------------------------------------------------------------
    /*다른 개발자가 만들어 놓은 객체*/
    const user = {
        name : "Mike";
        age : 30,
    }
    
    /*내가 작업 프로퍼티를 하나더 추가하고 싶을때*/
    //user.showName = function(){};
    //1. 이런 방법으로 추가하게되면 결과는 His name is Mike. His age is 30. His showName is function(){}.
    
    const showName = Symbol("showName");
    user[showName] = function(){
        console.log(this.name);
    }
    //2. 그래서 심볼showName을 하나 만들어 이곳에 추가했을때 결과는 His name is Mike. His age is 30.처럼 원본데이터를 건드리지 않고 심볼은 숨겨져서 나옴
    
    user[showName]();//Mike
    
    /*사용자가 접속하면 보는 메세지*/
    for(let key in user){
        console.log(`His ${key} is ${user[key]}.`);
    }

    * Symbol.for() : 전역심볼

     

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

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

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

    const id01 = Symbol.for("id");
    const id02 = Symbol.for("id");
    
    id01 === id02;//true
    
    /*
    이름을 얻고 싶다면 keyFor
    전역심볼이 아니면 keyFor를 사용할 수 없음
    대신 description으로 이름을 알 수 있음
    */
    
    //전역심볼일때 keyFor 사용
    Symbol.keyFor(id01);//id
    
    
    //전역심볼이 아닐 때 description 사용
    const id = Symbol("id입니다.");
    id.description;//id입니다.

     

    반응형

    'javascript' 카테고리의 다른 글

    String 문자형  (0) 2023.04.13
    Number, Math  (0) 2023.04.12
    객체Objcet에서 사용 가능한 methods와 Computed property  (0) 2023.04.08
    생성자 함수  (0) 2023.04.08
    배열 array  (0) 2023.03.28

    댓글

Designed by Tistory.