객체는 key로 사용할 수 있는 값이 문자열
또는 Symbol
값 이지만,
map은 객체를 포함한 모든 값을 키로 사용할 수 있다.
객체는 이터러블
이 아니지만 map은 이터러블
이다.
객체는 요소의 개수를 length로, map은 size메서드로 확인할 수 있다.
Map 객체는 Map 생성자 함수로 생성한다. 인수를 전달하지 않으면 빈 Map 객체가 생성된다.
Map 생성자 함수는 이터러블을 인수로 전달받아 map 인스턴스 객체를 생성한다. 이때 인수로 전달되는 이터러블은 key
와 value
의 쌍으로 이루어진 요소로 구성되야 한다.
const map1 = new Map([['key1', 'value1'], ['key2', 'value2']]);
console.log(map1); *// Map(2) {"key1" => "value1", "key2" => "value2"}*
const map2 = new Map([1, 2]); *// TypeError: Iterator value 1 is not an entry object*
⚠️*증복된 키
는 map 인스턴스 객체에 요소로 저장되지 않는다.*
const map = new Map([['key1', 'value1'], ['key1', 'value2']]);
console.log(map); *// Map(1) {"key1" => "value2"}*
*Map.prototype.size
프로퍼티를 사용한다. (set과 비슷)*
<aside> 💡 size 프로퍼티는 setter 함수없이 getter 함수만 존재하는 접근자 프로퍼티다. 그래서 size 프로퍼티에 숫자를 할당하여 map 객체의 요소개수를 변경할수 없다.
</aside>
const map = new Map([['key1', 'value1'], ['key2', 'value2']]);
map.size = 10; *// 무시된다.*
console.log(map.size); *// 2*
Map 인스턴스 객체에 요소를 추가할때는 Map.prototype.set
메서드를 사용한다.