Javascript Map对象如何改进我们的编码?

Van*_*als 21 javascript ecmascript-6

如果我们可以使用javascript对象创建键/值对,那么假设是什么用于ES6新的Map()对象?

我什么时候应该使用另一个?Map是限制为值还是包含函数?

Sze*_*sui 12

  1. 任何东西都可以用作地图中的关键字.
  2. 映射是有序的,允许迭代.

结合1和2,当您遍历地图时,您将获得一组有用的键值对!

查看map.prototype.forEach()文档.

来源:另一个很好的问答交换.值得将此标记为重复.

更新: 添加到此答案以直接解决问题:
只要您需要将事物关联在一起或保留插入顺序(通用数据结构需要此操作),您应该使用地图.

您可以在不需要执行此操作时使用对象,但它们只是执行不同的操作.

更新2: OP询问功能是否也正常.是的,因为价值观也可以起作用!看看这个:

let x = new Map();
let y = () => {
  console.log('derp');
}
x.set(y, "HI");
console.log(x.get(y)); //will log "HI"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看此引用的来源,在Eloquent JavaScript的一个很好的章节中:
"每个值都有一个确定其角色的类型.在JavaScript中有六种基本类型的值:数字,字符串,布尔值,对象,函数和未定义的值."

此外,地图和对象之间的主要区别,来自MDN,标题为" 对象和地图比较 ":

  1. Object有一个原型,因此地图中有默认键.但是,可以使用map = Object.create(null)绕过此值.
  2. Object的键是字符串,它们可以是Map的任何值.
  3. 您必须手动跟踪对象的大小,才能轻松获得Map的大小.

同样,键可以是任何值!

  • 任何事物?甚至功能? (2认同)
  • 当然!这是ES6 Arrow功能.它是声明函数的一种较短的语法,也可以执行函数的"this"值的词法绑定.它与一些流行的coffeescript语法有关.谷歌周围有点.希望有所帮助! (2认同)

Que*_*tin 6

  • 地图是订购的.
  • 映射键不必是字符串

  • 是的。映射是可迭代的,在迭代时保持顺序,并且具有大小而不是长度! (2认同)