ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ES6] WeakSet vs Set [번역]
    맨땅에코딩/javascript 2020. 8. 9. 23:53

    [차이점]

     

    앞서 작성한 WeakMap과 WeakSet 유사하다.

    • Set과 유사하지만 object를 key로 가져야한다.
    • object는 다른곳에서 접근 가능할 동안만 존재한다.
    • Set 처럼, add, has, delete 메소드를 제공하나 size, keys()와 iteration은 제공하지 않는다.

    "weak"이 된다는 것은 추가적 저장소로서의 활동하는것을 의미한다. 

    하지만, 임의적인 데이터가 아닌  예/아니오의 사실만을 위해서다.

    [사용예]

     

    let visitedSet = new WeakSet();
    
    let john = { name: "John" };
    let pete = { name: "Pete" };
    let mary = { name: "Mary" };
    
    visitedSet.add(john); // John visited us
    visitedSet.add(pete); // Then Pete
    visitedSet.add(john); // John again
    
    // visitedSet has 2 users now
    
    // check if John visited?
    alert(visitedSet.has(john)); // true
    
    // check if Mary visited?
    alert(visitedSet.has(mary)); // false
    
    john = null;
    
    // visitedSet will be cleaned automatically

     

    가장 눈여겨볼 제한점은 반복의 부재인데, 아마도 불편함이 보여질 수 있다.

    하지만 WeakSet은 주요작업의 수행을 막지는 않는다. - 다른 장소에 저장/관리되는 객체에 대한

    "추가적인 데이터 저장소"가 된다.

     

     

    let messages = [
      {text: "Hello", from: "John"},
      {text: "How goes?", from: "John"},
      {text: "See you soon", from: "Alice"}
    ];
    
    let readMessages = new WeakSet();
    
    // two messages have been read
    readMessages.add(messages[0]);
    readMessages.add(messages[1]);
    // readMessages has 2 elements
    
    // ...let's read the first message again!
    readMessages.add(messages[0]);
    // readMessages still has 2 unique elements
    
    // answer: was the message[0] read?
    alert("Read message 0: " + readMessages.has(messages[0])); // true
    
    messages.shift();
    // now readMessages has 1 element (technically memory may be cleaned later)

    condition

    1) messages object로부터 message가 삭제됏을때  데이터 구조로부터 삭제돼야함

    2) message object를 수정하거나 추가할 수 없다. 

     

     

     

    [원문]

    https://javascript.info/weakmap-weakset

     

     

                

    '맨땅에코딩 > javascript' 카테고리의 다른 글

    apply,call,bind 비교  (0) 2020.09.11
    [ES6] WeakMap vs Map [번역]  (0) 2020.08.09
    [ES6] Set vs Array 비교 [번역]  (0) 2020.08.07
    [ES6] Map vs Object 비교 [번역]  (0) 2020.08.07
    [ES6] var, let, const 비교  (0) 2020.06.26
Designed by Tistory.