[ES6] Objects vs Maps

Map is really useful when you want to use object as a key to set vaule, in ES5, you cannot really use object as a key:

var user1 = {
  name: "Wan",
  age: 25
};

var user2 = {
  name: "Zhen",
  age: 27
};

var users = {};

users[user1] = 5;
users[user2] = 10;

console.log(users);

/**
[object Object] {
  [object Object]: 10
}
**/

As you can see, the output is always 10. It means the last value will overwrite the previous value.

The reason for that is because in Javascript, when you use Array syntax to assign value, the 'key' is always 'string'.

So if you use object 'user1', Javascript engine actually read it as 

"[object Object]"

In other words, no matter what object you give, the 'users' array has only one value:

console.log(Object.keys(users));  // ["[object Object]"] 

-------------------------------------------------

Map in ES6 can help to solve the problem:

var user1 = {
  name: "Wan",
  age: 25
};

var user2 = {
  name: "Zhen",
  age: 27
};

var users = new Map();

users.set(user1, 5);
users.set(user2, 10);

console.log(users.get(user1));  // 5
console.log(users.get(user2));  // 10
原文地址:https://www.cnblogs.com/Answer1215/p/5126113.html