JavaScript WeakMap 사용 상세 정보

3681 단어 JavaScriptWeakMap
WeakMap 객체는 키 그룹/값 쌍의 집합이며 여기서 키는 약참조입니다.그 키는 반드시 대상이어야 하며, 값은 임의일 수 있다.

문법


new WeakMap([iterable])

매개 변수


iterable
Iterable은 하나의 수조(이원수조) 또는 다른 교체가 가능하며 그 요소는 키 값이 맞는 대상이다.각 키 값 쌍은 새 WeakMap에 추가됩니다.null은 undefined로 간주됩니다.

묘사


WeakMap의 키는 Object 유형일 수 있습니다.원본 데이터 유형은 키(예: Symbol)가 될 수 없습니다.

Why WeakMap?


자바스크립트에서 맵 API는 네 개의 API 방법으로 두 개의 수조 (키 하나, 값 저장) 를 함께 사용하도록 할 수 있다.이 맵에 값을 설정할 때 키와 값을 이 두 그룹의 끝에 추가합니다.따라서 키와 값의 인덱스가 두 개의 수조에 대응하도록 합니다.이 맵에서 값을 찾을 때, 모든 키를 훑어본 다음, 인덱스를 사용하여 값을 저장하는 그룹에서 해당하는 값을 검색해야 합니다.
그러나 이러한 실현은 두 가지 큰 단점이 있다. 우선 값을 부여하고 검색하는 작업은 모두 O(n)의 시간 복잡도(n은 키 값이 맞는 개수)이다. 왜냐하면 이 두 작업 모두 전체 수조를 두루 돌아다니며 일치해야 하기 때문이다.또 다른 단점은 메모리 유출을 초래할 수 있다는 것이다. 왜냐하면 수조는 키와 값을 계속 인용하기 때문이다.이런 인용 때문에 쓰레기 회수 알고리즘은 다른 인용이 없어도 그들을 회수 처리할 수 없다.
이에 비해 원생 WeakMap은 모든 키 대상의'약한 인용'을 보유하고 있으며, 이는 다른 인용이 존재하지 않을 때 쓰레기 수거가 정확하게 진행될 수 있음을 의미한다.원생 WeakMap의 구조는 특수하고 유효하며, 맵에 사용되는 키는 회수되지 않았을 때만 유효하다.
이러한 약한 인용 때문에 WeakMap의 키는 일일이 다 들 수 없다.만약 키가 일일이 들 수 있다면, 그 목록은 쓰레기 회수 메커니즘의 영향을 받아 불확실한 결과를 얻을 것이다.따라서 이런 유형의 대상의 키 값 목록을 원한다면 맵을 사용해야 합니다.
기본적으로 대상에 데이터를 추가하고 쓰레기 회수 메커니즘을 방해하지 않으려면 WeakMap을 사용할 수 있다.

속성

  • WeakMap.length
  • length 속성의 값은 0입니다.
  • WeakMap.prototype
  • WeakMap 구조기의 원형입니다.모든 WeakMap 객체에 속성을 추가할 수 있습니다.

    WeakMap 인스턴스


    모든 WeakMap 인스턴스는 WeakMap에서 상속됩니다.prototype.

    속성


    WeakMap.prototype.constructor
    WeakMap 인스턴스를 작성한 원형 함수를 반환합니다.WeakMap 함수는 기본값입니다.

    방법

  • WeakMap.prototype.delete(key)
  • 키의 관련 객체를 제거합니다.실행 후 WeakMap.prototype.has(key)가false로 되돌아옵니다.
  • WeakMap.prototype.get(key)
  • 키 관련 대상이나 undefined (키 관련 대상이 없을 때) 를 되돌려줍니다.
  • WeakMap.prototype.has(key)
  • 키 연관 객체가 있는지 여부에 따라 Boolean 값을 반환합니다.
  • WeakMap.prototype.set(key, value)
  • WeakMap에서 키 연관 객체 세트를 설정하고 이 WeakMap 객체로 돌아갑니다.

    예제


    WeakMap 사용

    
    const wm1 = new WeakMap(),
       wm2 = new WeakMap(),
       wm3 = new WeakMap();
    const o1 = {},
       o2 = function(){},
       o3 = window;
    
    wm1.set(o1, 37);
    wm1.set(o2, "azerty");
    wm2.set(o1, o2); // value , 
    wm2.set(o3, undefined);
    wm2.set(wm1, wm2); //  , WeakMap 
    
    wm1.get(o2); // "azerty"
    wm2.get(o2); // undefined,wm2 o2 
    wm2.get(o3); // undefined, undefined
    
    wm1.has(o2); // true
    wm2.has(o2); // false
    wm2.has(o3); // true ( undefined)
    
    wm3.set(o1, 37);
    wm3.get(o1); // 37
    
    wm1.has(o1);  // true
    wm1.delete(o1);
    wm1.has(o1);  // false

    하나의 띠를 이루다.clear() 메소드 클래스 WeakMap 클래스

    
    class ClearableWeakMap {
     constructor(init) {
      this._wm = new WeakMap(init)
     }
     clear() {
      this._wm = new WeakMap()
     }
     delete(k) {
      return this._wm.delete(k)
     }
     get(k) {
      return this._wm.get(k)
     }
     has(k) {
      return this._wm.has(k)
     }
     set(k, v) {
      this._wm.set(k, v)
      return this
     }
    }

    규범


    Specification
    Status
    Comment
    ECMAScript 2015 (6th Edition, ECMA-262) WeakMap
    Standard
    Initial definition.
    ECMAScript (ECMA-262) WeakMap
    Living Standard
    다음은 JavaScript WeakMap 사용에 대한 상세한 내용입니다. JavaScript WeakMap에 대한 더 많은 자료는 저희의 다른 관련 글을 주목해 주십시오!

    좋은 웹페이지 즐겨찾기