맵객체의 핵심은 객체 프로퍼티키로 객체를 사용할 수 있는 객체다.
일반객체는 프로퍼티키로 문자열과 심볼만 사용할 수 있다.
맵객체를 생성하는 방법
1. new Map();
let obj = {name:'lee'};
let a = new Map();
a.set(1,'lee');
a.set(true,'park');
a.set(obj,'user');
위와 같이 하드코딩으로 객체에 프로퍼티를 추가한다. 숫자, 불린, 객체를 키로 사용할 수 있다.
let obj = {
name: "John",
age: 30
};
let m1 = new Map( obj );
console.log(m1); // 이터레이터가 없다는 에러가 발생된다.
프로퍼티를 개별적으로 추가하기위해 하드코딩하기 어려워 위와 같이 객체를 인자로 전달하면 에러가 발생한다.
이터러블한 객체를 인자로 사용해야 맵객체에 추가된다.
그런데 이터러블하지 않은 일반객체를 이터러블속성을 추가하는 것은 생각보다 간단하지 않다.
Symbol.iterator 메소드를 만들어주는 함수가 없기때문이다. 반면에 배열로 만들어주는 함수는 있기때문에 쉽게 배열화할 수 있다.
여기서 생각해야 할것이 있다.
이터러블 객체를 왜 무슨 목적으로 맵객체로 만들려고 하는가?
답은 이터러블객체를 맵객체로 만들이유가 없다.
그렇다면 맵객체가 왜 필요한가?
weakMap객체가 답이다.
다음에 보겠지만 맵객체는 프로퍼티들을 추가하고 어떤 프로퍼티가 있는지를 찾는데 특화되어있다.
set메소드로 프로퍼티를 추가하고 has메소드로 있는지 확인하고 있다면 get메소드로 값을 얻는데 사용된다.
일반객체로도 얼마든지 할수 있지만 객체로는 직접프로퍼티를 다루어야 하기때문에 보다 간소한 맵객체를 사용한다.