- ECMAScript2015에서 도입
Map 객체는 간단한 key와 value의 map이며 삽입 순서대로 반복할 수 있다.
let cats = new Map();
cats.set('umi', 'white');
cats.set('garfield', 'orange');
cats.set('hellokitty', 'white');
cats.size; // 3
cats.get('umi'); // white
cats.get('a'); // undefined
cats.has('garfield'); // true
cats.delete('hellokitty');
for (let [key, value] of cats) console.log(key + ': ' + value);
for (let color of cats) console.log(color);
cats.clear();
cats.size; // 0
- 객체는 문자열과 값을 map하기 위해 쓰인다.
Map 객체는 객체보다 더 많은 기능을 제공한다.
| 객체 |
키가 될 수 있는 값 |
데이터의 개수 |
반복가능 |
프로로타입 |
Object |
String 혹은 Symbol |
직접 순회해야 함. |
직접 순회해야 함 |
프로토타입을 가짐 |
Map |
모든 값 |
size 프로퍼티 |
삽입 순서대로 가능 |
|
WeakMap 객체는 키가 전부 객체이고 값은 임의의 값이 될 수 있는 key/value 쌍의 collection이다.
Set 객체는 고유한 값들의 collection이다.
- 삽입 순서대로 반복가능하다.
let mySet = new set();
mySet.add(1);
mySet.add(3);
mySet.has(1); // true
mySet.delete('3');
mySet.size; // 1
for (let item of mySet) console.log(item);
// Set 객체 배열로 변환하기
Array.from(mySet);
[...mySet];
// 배열을 Set 객체로 변환하기
let mySet = new Set([ 1, 2, 1 ]);
| 객체 |
요소 삭제 시간 |
요소 삭제하기 |
요소의 값 |
Set |
|
값으로 삭제한다. |
각 값은 모두 고유하여 중복되지 않는다. |
Array |
느리다 |
인덱스를 바탕으로 splice를 사용한다. |
중복된 값이 가능하다. |
WeakSet 객체는 값이 전부 객체이고 고유한 collection이다.
| 객체 |
값 |
weak |
열거가능 |
Set |
모든 값 가능 |
|
가능 |
WeakSet |
객체만 가능 |
WeakSet 객체 안의 모든 객체에 대한 참조가 없으면 가비지 콜렉터로 처리됨. |
불가능 |
Map 객체의 키 동등성과 Set 객체의 값 동등성은 same value zero 알고리즘을 바탕으로 한다.
- 동등성은 일치 비교 연산자(
===)로 수행된다.
-0과 +0은 동등하다.
NaN은 그 자신과만 동등하다.