A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.cdn.mozilla.net/ko/docs/Web/JavaScript/Reference/Global_Objects/WeakSet below:

WeakSet - JavaScript | MDN

WeakSet

Baseline Widely available *

**WeakSet**은 객체와 등록되지 않은 심볼을 포함하여 쓰레기 수집이 가능한 값의 모음입니다. WeakSet의 값은 한 번만 나타날 수 있습니다. 이 값은 WeakSet의 컬렉션에서 고유합니다.

설명

WeakSet의 값은 필연적으로 쓰레기 수집될 수 있습니다. 대부분의 원시 데이터 유형은 대부분 임의로 생성될 수 있고 수명이 없으므로 저장할 수 없습니다. 객체와 등록되지 않은 심볼은 쓰레기 수집이 가능하기 때문에 저장될 수 있습니다

Set 객체와 주된 차이는 다음과 같습니다.

사용 예: 순환 참조 탐지하기

재귀적으로 자신을 호출하는 함수는 순환 데이터 구조를 방지하기 위해 이미 처리된 객체를 추적할 수 있는 방법이 필요합니다.

WeakSet은 이 목적을 위한 이상적인 방법입니다.

// 객체 내 저장된 모든 것에 대해 콜백 실행
function execRecursively(fn, subject, _refs = new WeakSet()) {
  // 무한 재귀 회피
  if (_refs.has(subject)) {
    return;
  }

  fn(subject);
  if (typeof subject === "object" && subject) {
    _refs.add(subject);
    for (const key in subject) {
      execRecursively(fn, subject[key], _refs);
    }
    _refs.delete(subject);
  }
}

const foo = {
  foo: "Foo",
  bar: {
    bar: "Bar",
  },
};

foo.bar.baz = foo; // 순환 참조!
execRecursively((obj) => console.log(obj), foo);

여기서는 첫 번째 실행 시 WeakSet이 생성되고 이후 모든 함수 호출(내부 _refs 매개변수 사용)과 함께 전달됩니다.

객체의 수 또는 순회 순서는 중요하지 않으므로, 특히 매우 많은 수의 객체가 관련된 경우 객체 참조를 추적하려면 WeakSet이 Set보다 더 적합하고 성능도 뛰어납니다.

생성자
WeakSet()

새 WeakSet 객체를 생성합니다.

인스턴스 속성

아래 속성은 WeakSet.prototype에 정의되어 있고, 모든 WeakSet 인스턴스와 공유됩니다.

WeakSet.prototype.constructor

인스턴스 객체를 생성하는 생성자 함수입니다. WeakSet 인스턴스에서는 초기 값은 WeakSet 생성자입니다.

WeakSet.prototype[@@toStringTag]

@@toStringTag 속성의 초기 값은 문자열 "WeakSet"입니다. 이 속성은 Object.prototype.toString()에서 사용됩니다.

인스턴스 메서드
WeakSet.prototype.add()

WeakSet 객체에 value를 추가합니다.

WeakSet.prototype.delete()

WeakSet에서 value를 제거합니다. 이 이후에 WeakSet.prototype.has(value)는 false를 반환합니다.

WeakSet.prototype.has()

WeakSet 객체에 value 값 존재 여부를 부울 값으로 반환합니다.

예제 WeakSet 객체 사용
const ws = new WeakSet();
const foo = {};
const bar = {};

ws.add(foo);
ws.add(bar);

ws.has(foo); // true
ws.has(bar); // true

ws.delete(foo); // set에서 foo를 제거
ws.has(foo); // false, foo 는 이미 제거
ws.has(bar); // true, bar 는 유지 됨
명세 브라우저 호환성 같이 보기

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4