Map은 JavaScript의 자료구조 중 하나로,
데이터의 구성, 검색 및 사용을 객체나 배열보다 효율적으로 처리할 수 있게 한다.
key-value 쌍을 저장한다.
객체와 비슷하나, 객체와 달리 키로 사용할 수 있는 모든 유형을 사용할 수 있다.
하나의 Map에서의 키는 오직 단 하나만 존재한다. (유일성)
Map과 객체는 유사하다.
key-value의 쌍으로 이루어져있으며 키에 대한 값을 받아올 수 있다.
키를 삭제할 수 있고 무엇이 저장되어 있는지 알 수 있다.
둘은 비슷한 점이 있지만 중요한 차이점이 있다.
Map은 기본적으로 키를 포함하지 않고 객체는 기본 키가 포함되어 있다.
Map은 사용자가 제공하는 키와 값에 대해 안전하게 사용할 수 있다.
객체는 객체 주입 공격이 발생할 수 있다.
공격자가 객체의 프로토타입을 재정의할 수 있다.
Map의 키는 모든 값이 될 수 있다.
객체의 키는 String 또는 Symbol이어야 한다.
Symbol은 생성자가 symbol 원시값을 반환하는 내장 객체이다.
객체에 속성을 추가할 때 고유한 키를 부여하여 다른 코드와 충돌하지 않도록 할 때 쓰인다.
Map에서 키는 단순하고 직관적 방식으로 정렬된다.
항목을 삽입한 순서대로 함목, 키 값을 반복한다.
객체의 키는 정렬되어 있지만 항상 그런것은 아니며 순서가 복잡하다.
Map의 아이템의 수는 size 속성에서 쉽게 가져올 수 있다.
객체의 아이템 수는 수동으로 결정해야 한다.
Map은 iterable하기 떄문에 직접 반복할 수 있다.
객체는 for...of문을 사용하여 직접적으로 반복할 수 있다.
iterable(반복 가능한) 객체
배열과 문자열은 대표적인 iterable 객체이다.
Map은 key-value 쌍의 빈번한 추가 및 제거에 최적화되어 있다.
Map은 직력화 또는 파싱에 대한 기본 지원이 없지만
객체는 JSON.Stringify() 와 JSON.parse() 로 기본 지원된다.
새로운 Map 생성하기
const myMap = new Map();
값 설정하기
key를 이용해 value를 저장한다.
myMap.set(keyString, "value associated with 'a string'");
값 불러오기
key에 해당하는 값을 반환한다.
console.log(myMap.get(keyString));