맵은 키가 있는 데이터를 저장한다는 점에서 객체와 유사하다. 다만 맵은 키에 다양한 자료형을 허용한다는 점에서 차이가 존재한다.
맵에는 다음과 같은 주요 메서드와 프로퍼티가 있다.
new Map()
- 맵 생성map.set(key, value)
- key를 이용해 value 저장map.get(key)
- key에 해당하는 값 반환. 존재하지 않으면 undefined 반환map.has(key)
- key가 존재하면 true, 존재하지 않으면 falsemap.delete(key)
- key에 해당하는 값 삭제map.clear()
- 맵 안의 모든 요소 제거map.size
- 요소의 개수 반환let map = new Map();
map.set('1', 'str1');
map.set(1, 'num1');
map.set(true, 'bool1');
// 객체는 키를 문자형으로 변환하지만 맵은 키의 타입을 변환시키지 않고 그대로 유지.
// 따라서 아래의 코드는 출력되는 값이 다르다.
alert(map.get(1)); // 'num1'
alert(map.get('1')); // 'str1'
alert(map.size); // 3
map.set
을 호출할 때마다 맵 자신이 반환된다. 이를 이용하면 메서드 체이닝을 사용할 수 있다.
map.set('1', 'str1')
.set(1, 'num1')
.set(true, 'bool1');
맵은 키로 객체도 혀용한다.
객체를 키로 사용할 수 있다는 점은 맵의 가장 중요한 기능 중 하나이다. 객체에는 문자열 키를 사용할 수 있지만, 객체 키는 사용할 수 없다.
let john = { name: "John" };
let visitsCountObj = {};
visitsCountObj[john] = 123;
alert( visitsCountObj["[object Object]" ); // 123
visitsCountObj는 객체이기 때문에 모든 키를 문자형으로 변환한다. 이 과정에서 john은 문자형으로 변환되어 “[object Object]”가 된다.