키-값을 쌍으로 저장하고, 삽입 순서도 기억하는 콜레션이다. Object와 유사하지만 순서, key 타입의 자유도 등에서 차이점이 있다.
new Map()
map[key] = 2 처럼 object와 동일한 방식으로 값을 설정하고, 해당 value 값을 가져올 수 있다.
하지만 이 방식은 map을 일반 객체로 취급하는 방법으로, 여러 제약이 생긴다.
map.get / map.set과 같은 메소드를 사용해야한다.
Map : 명시적으로 제공한 키 외에는 어떤 키도 가지지 않는다.
Object : 프로토타입을 가지므로 기본 키가 존재할 수 있다. 주의하지 않으면 직접 제공한 키와 충돌 가능성이 있음
Map : 함수, 객체 등 '모든' 자료형이 가능하다.
Object : string, symbol만 가능하다.
Map : 키는 정렬 되므로 삽입순으로 순회가 이루어진다.
Object : 정렬되지 않는다. 순서가 없다.
Map : size 속성을 통해 쉽게 알 수 있다. (array의 length처럼)
Object : 직접 계산해 내야한다.
ex) Object.keys(obj).length
Map : 바로 순회가 가능하다. (forEach, for of 등으로.. 다만 forEach는 배열과 조금 다르다. 참고)
Object : for in, keys 등으로 key값을 구한 후에 순회해야한다.
Map : 키-값 쌍의 추가 / 제거가 잦을 때 더 좋은 성능을 보인다.
Object : 키-값 쌍의 추가 / 제거를 위한 최적화가 없다.
자료형에 관계 없이 원시 값, 객체 참조 모두 '유일한 값'을 저장할 수 있다.
new Set([iterable])
set또한 map에서 언급한 것과 마찬가지로 get, set, has, delete, clear, size와 같은 메소드를 통해 값을 접근, 변경, 삭제한다