?um/p1-90`Map은 키와 값이 모두 임의의 ECMAScript 언어 값일 수 있는 키/값 쌍의 컬렉션이다. 서로 다른 키 값은 Map의 컬렉션 안에서 하나의 키/값 쌍에만 나타날 수 있다. 서로 다른 키 값은
Map은 평균적으로 컬렉션의 요소 수에 대해 준선형보다 빠른 접근 시간을 제공하는 해시 테이블이나 다른 메커니즘을 사용하여 구현되어야 한다. 이 명세에서 사용되는 자료 구조는 Map의 요구되는 관찰 가능한 의미론을 설명하기 위한 것일 뿐이다. 실행 가능한 구현 모델로 의도된 것이 아니다.
Map 생성자는:
extends 절의 값으로 사용될 수 있다. 지정된 Map 동작을 상속하려는 서브클래스 생성자는 Map.prototype 내장 메서드를 지원하는 데 필요한 내부 상태로 서브클래스 인스턴스를 생성하고 초기화하기 위해 Map 생성자에 대한 super 호출을 포함해야 한다.이 함수는 호출될 때 다음 단계를 수행한다:
매개변수 iterable이 존재하면, Map 키로 사용될 값인 첫 번째 요소와 그 키에 연결할 값인 두 번째 요소를 가진 2요소 배열 유사 객체를 생성하는
The abstract operation AddEntriesFromIterable takes arguments target (an Object), iterable (an ECMAScript language value, but not
매개변수 iterable은 Map 키로 사용될 값인 첫 번째 요소와 그 키에 연결할 값인 두 번째 요소를 가진 2요소 배열 유사 객체를 생성하는
Map 생성자는:
callback은 두 인자를 받는 함수여야 한다. groupBy는 items의 각 요소에 대해 오름차순으로 한 번씩 callback을 호출하고, 새로운 Map을 구성한다. callback이 반환한 각 값은 Map에서 키로 사용된다. 그러한 각 키에 대해, 결과 Map은 그 키를 키로 하고 callback이 그 키를 반환한 모든 요소를 포함하는 배열을 값으로 하는 엔트리를 가진다.
callback은 요소의 값과 요소의 인덱스라는 두 인자와 함께 호출된다.
groupBy의 반환값은 Map이다.
이 함수는 호출될 때 다음 단계를 수행한다:
Map.prototype의 초기값은
이 속성은 { [[Writable]]:
Map[%Symbol.species%]는 set 접근자 함수가
이 함수의
파생 컬렉션 객체를 생성하는 메서드는 파생 객체를 생성하는 데 사용할 생성자를 결정하기 위해
Map 프로토타입 객체는:
이 메서드는 호출될 때 다음 단계를 수행한다:
기존 [[MapData]]
Map.prototype.constructor의 초기값은
이 메서드는 호출될 때 다음 단계를 수행한다:
값
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
callback은 세 인자를 받는 함수여야 한다. forEach는 Map에 존재하는 각 키/값 쌍에 대해 키 삽입 순서대로 한 번씩 callback을 호출한다. callback은 실제로 존재하는 Map의 키에 대해서만 호출되며, Map에서 삭제된 키에 대해서는 호출되지 않는다.
thisArg 매개변수가 제공되면, callback의 각 호출에서
callback은 항목의 값, 항목의 키, 그리고 순회 중인 Map이라는 세 인자와 함께 호출된다.
forEach는 호출 대상 객체를 직접 변경하지 않지만, callback 호출에 의해 객체가 변경될 수 있다. Map의 [[MapData]]의 각 엔트리는 한 번만 방문된다. forEach 호출이 시작된 뒤 추가된 새 키도 방문된다. 어떤 키가 방문된 뒤 삭제되고 forEach 호출이 완료되기 전에 다시 추가되면 그 키는 다시 방문된다. forEach 호출이 시작된 뒤 방문되기 전에 삭제된 키는 forEach 호출이 완료되기 전에 그 키가 다시 추가되지 않는 한 방문되지 않는다.
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
Map.prototype.size는 set 접근자 함수가
이 메서드는 호출될 때 다음 단계를 수행한다:
이 속성은 { [[Writable]]:
Map 인스턴스는
Map Iterator는 어떤 특정 Map 인스턴스 객체에 대한 특정 반복을 나타내는 객체이다. Map Iterator 객체에는 이름 있는 생성자가 없다. 대신, Map Iterator 객체는 Map 인스턴스 객체의 특정 메서드를 호출하여 생성된다.
The abstract operation CreateMapIterator takes arguments map (an ECMAScript language value) and kind (
%MapIteratorPrototype% 객체는:
이 속성은 { [[Writable]]:
Set 객체는 ECMAScript 언어 값의 컬렉션이다. Set은 서로 다른 각 값을 최대 한 번만 포함할 수 있다. 서로 다른 값은
Set 객체는 평균적으로 컬렉션의 요소 수에 대해 준선형보다 빠른 접근 시간을 제공하는 해시 테이블이나 다른 메커니즘을 사용하여 구현되어야 한다. 이 명세에서 사용되는 자료 구조는 Set 객체의 요구되는 관찰 가능한 의미론을 설명하기 위한 것일 뿐이다. 실행 가능한 구현 모델로 의도된 것이 아니다.
Set Record는 Set 또는 유사 객체의 인터페이스를 캡슐화하는 데 사용되는
Set Record는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[SetObject]] | Object | Set 또는 유사 객체. |
| [[Size]] |
음이 아닌 |
객체의 보고된 크기. |
| [[Has]] | 함수 객체 |
객체의 has 메서드.
|
| [[Keys]] | 함수 객체 |
객체의 keys 메서드.
|
The abstract operation GetSetRecord takes argument obj (an ECMAScript language value) and returns either a
The abstract operation SetDataHas takes arguments setData (a
The abstract operation SetDataIndex takes arguments setData (a
The abstract operation SetDataSize takes argument setData (a
Set 생성자는:
extends 절의 값으로 사용될 수 있다. 지정된 Set 동작을 상속하려는 서브클래스 생성자는 Set.prototype 내장 메서드를 지원하는 데 필요한 내부 상태로 서브클래스 인스턴스를 생성하고 초기화하기 위해 Set 생성자에 대한 super 호출을 포함해야 한다.이 함수는 호출될 때 다음 단계를 수행한다:
Set 생성자는:
Set.prototype의 초기값은
이 속성은 { [[Writable]]:
Set[%Symbol.species%]는 set 접근자 함수가
이 함수의
파생 컬렉션 객체를 생성하는 메서드는 파생 객체를 생성하는 데 사용할 생성자를 결정하기 위해
Set 프로토타입 객체는:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
기존 [[SetData]]
Set.prototype.constructor의 초기값은
이 메서드는 호출될 때 다음 단계를 수행한다:
값
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
반복 목적상 Set은 각 엔트리가 키와 값으로 같은 값을 가지는 Map과 유사하게 보인다.
이 메서드는 호출될 때 다음 단계를 수행한다:
callback은 세 인자를 받는 함수여야 한다. forEach는
thisArg 매개변수가 제공되면, callback의 각 호출에서
callback은 세 인자와 함께 호출된다: 첫 두 인자는 Set에 포함된 값이다. 두 인자 모두에 같은 값이 전달된다. 순회 중인
callback은 Map과 Array의 forEach 메서드가 사용하는 콜백 함수와 일관되도록 세 인자와 함께 호출된다. Set의 경우, 각 항목 값은 키이자 값으로 간주된다.
forEach는 호출 대상 객체를 직접 변경하지 않지만, callback 호출에 의해 객체가 변경될 수 있다.
각 값은 보통 한 번만 방문된다. 그러나 어떤 값이 방문된 뒤 삭제되고 forEach 호출이 완료되기 전에 다시 추가되면 그 값은 다시 방문된다. forEach 호출이 시작된 뒤 방문되기 전에 삭제된 값은 forEach 호출이 완료되기 전에 그 값이 다시 추가되지 않는 한 방문되지 않는다. forEach 호출이 시작된 뒤 추가된 새 값은 방문된다.
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
반복 목적상 Set은 각 엔트리가 키와 값으로 같은 값을 가지는 Map과 유사하게 보인다.
Set.prototype.size는 set 접근자 함수가
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 속성은 { [[Writable]]:
Set 인스턴스는
Set Iterator는 아래에 정의된 구조를 가지는 보통 객체로, 어떤 특정 Set 인스턴스 객체에 대한 특정 반복을 나타낸다. Set Iterator 객체에는 이름 있는 생성자가 없다. 대신, Set Iterator 객체는 Set 인스턴스 객체의 특정 메서드를 호출하여 생성된다.
The abstract operation CreateSetIterator takes arguments set (an ECMAScript language value) and kind (
%SetIteratorPrototype% 객체는:
이 속성은 { [[Writable]]:
WeakMap은 키가 객체 및/또는 심벌이고 값은 임의의 ECMAScript 언어 값일 수 있는 키/값 쌍의 컬렉션이다. WeakMap은 특정 키를 가진 키/값 쌍을 포함하는지 조회할 수 있지만, 키로 보
구현은 WeakMap의 키/값 쌍이 접근 불가능해진 시점과 그 키/값 쌍이 WeakMap에서 제거되는 시점 사이에 임의로 결정된 지연을 부과할 수 있다. 이 지연이 ECMAScript 프로그램에 관찰 가능하다면, 프로그램 실행에 영향을 줄 수 있는 비결정성의 원천이 될 것이다. 그러므로 ECMAScript 구현은 관찰자가 관찰되는 키를 제시할 것을 요구하지 않는 방식으로 WeakMap의 키를 관찰할 수단을 제공해서는 안 된다.
WeakMap은 평균적으로 컬렉션의 키/값 쌍 수에 대해 준선형보다 빠른 접근 시간을 제공하는 해시 테이블이나 다른 메커니즘을 사용하여 구현되어야 한다. 이 명세에서 사용되는 자료 구조는 WeakMap의 요구되는 관찰 가능한 의미론을 설명하기 위한 것일 뿐이다. 실행 가능한 구현 모델로 의도된 것이 아니다.
WeakMap과 WeakSet은, WeakMap 또는 WeakSet 인스턴스가 없었다면 객체 또는 심벌이 다른 방식으로 접근 불가능해져 구현의 가비지 컬렉션 메커니즘에 의해 자원 회수 대상이 되었을 경우 메모리 자원을 “누수”하지 않는 방식으로, 객체 또는 심벌에 상태를 동적으로 연결하는 메커니즘을 제공하기 위한 것이다. 이 특성은 WeakMap 또는 WeakSet 인스턴스에서 키로의 역방향 객체별/심벌별 매핑을 사용하여 달성할 수 있다. 또는 각 WeakMap 또는 WeakSet 인스턴스가 내부적으로 키와 값 데이터를 저장할 수도 있지만, 이 접근 방식은 WeakMap 또는 WeakSet 구현과 가비지 컬렉터 사이의 조정을 요구한다. 다음 참조들은 WeakMap과 WeakSet 구현에 유용할 수 있는 메커니즘을 설명한다:
Barry Hayes. 1997. Ephemerons: a new finalization mechanism. In Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA '97), A. Michael Berman (Ed.). ACM, New York, NY, USA, 176-183, http://doi.acm.org/10.1145/263698.263733.
Alexandra Barros, Roberto Ierusalimschy, Eliminating Cycles in Weak Tables. Journal of Universal Computer Science - J.UCS, vol. 14, no. 21, pp. 3481-3497, 2008, http://www.jucs.org/jucs_14_21/eliminating_cycles_in_weak
WeakMap 생성자는:
extends 절의 값으로 사용될 수 있다. 지정된 WeakMap 동작을 상속하려는 서브클래스 생성자는 WeakMap.prototype 내장 메서드를 지원하는 데 필요한 내부 상태로 서브클래스 인스턴스를 생성하고 초기화하기 위해 WeakMap 생성자에 대한 super 호출을 포함해야 한다.이 함수는 호출될 때 다음 단계를 수행한다:
매개변수 iterable이 존재하면, WeakMap 키로 사용될 값인 첫 번째 요소와 그 키에 연결할 값인 두 번째 요소를 가진 2요소 배열 유사 객체를 생성하는
WeakMap 생성자는:
WeakMap.prototype의 초기값은
이 속성은 { [[Writable]]:
WeakMap 프로토타입 객체는:
WeakMap.prototype.constructor의 초기값은
이 메서드는 호출될 때 다음 단계를 수행한다:
값
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 메서드는 호출될 때 다음 단계를 수행한다:
이 속성은 { [[Writable]]:
WeakMap 인스턴스는
WeakSet은 객체 및/또는 심벌의 컬렉션이다. 서로 다른 객체 또는 심벌은 WeakSet의 컬렉션의 요소로 한 번만 나타날 수 있다. WeakSet은 특정 값을 포함하는지 조회할 수 있지만, 보
구현은 WeakSet에 포함된 값이 접근 불가능해진 시점과 그 값이 WeakSet에서 제거되는 시점 사이에 임의로 결정된 지연을 부과할 수 있다. 이 지연이 ECMAScript 프로그램에 관찰 가능하다면, 프로그램 실행에 영향을 줄 수 있는 비결정성의 원천이 될 것이다. 그러므로 ECMAScript 구현은 관찰자가 관찰되는 값을 제시할 것을 요구하지 않는 방식으로 WeakSet이 특정 값을 포함하는지 결정할 수단을 제공해서는 안 된다.
WeakSet은 평균적으로 컬렉션의 요소 수에 대해 준선형보다 빠른 접근 시간을 제공하는 해시 테이블이나 다른 메커니즘을 사용하여 구현되어야 한다. 이 명세에서 사용되는 자료 구조는 WeakSet의 요구되는 관찰 가능한 의미론을 설명하기 위한 것일 뿐이다. 실행 가능한 구현 모델로 의도된 것이 아니다.
WeakSet 생성자는:
extends 절의 값으로 사용될 수 있다. 지정된 WeakSet 동작을 상속하려는 서브클래스 생성자는 WeakSet.prototype 내장 메서드를 지원하는 데 필요한 내부 상태로 서브클래스 인스턴스를 생성하고 초기화하기 위해 WeakSet 생성자에 대한 super 호출을 포함해야 한다.이 함수는 호출될 때 다음 단계를 수행한다:
WeakSet 생성자는:
WeakSet.prototype의 초기값은
이 속성은 { [[Writable]]:
WeakSet 프로토타입 객체는:
이 메서드는 호출될 때 다음 단계를 수행한다:
WeakSet.prototype.constructor의 초기값은
이 메서드는 호출될 때 다음 단계를 수행한다:
값
이 메서드는 호출될 때 다음 단계를 수행한다:
이 속성은 { [[Writable]]:
WeakSet 인스턴스는
The abstract operation CanonicalizeKeyedCollectionKey takes argument key (an ECMAScript language value) and returns an ECMAScript language value. It performs the following steps when called: