Map

맵은 키가 있는 데이터를 저장한다는 점에서 객체와 유사하다. 다만 맵은 키에 다양한 자료형을 허용한다는 점에서 차이가 존재한다.

맵에는 다음과 같은 주요 메서드와 프로퍼티가 있다.

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]”가 된다.