我刚刚发现了chromestatus.com,在失去了一天的时间后,发现了以下功能条目:
映射:映射对象是简单的键/值映射。
那让我感到困惑。常规JavaScript对象是字典,那么它Map与字典有何不同?从概念上讲,它们是相同的(根据 Map和Dictionary之间的区别是什么?)
Map
chromestatus文档参考也无济于事:
映射对象是键/值对的集合,其中键和值都可以是任意ECMAScript语言值。一个唯一的键值只能出现在地图集合中的一个键/值对中。使用创建地图时选择的比较算法来区分的不同键值。 Map对象可以按插入顺序迭代其元素。必须使用哈希表或其他机制来实现Map对象,这些机制通常平均提供与集合中元素数量成线性关系的访问时间。本Map对象规范中使用的数据结构仅用于描述Map对象所需的可观察语义。它并非旨在成为可行的实施模型。
映射对象是键/值对的集合,其中键和值都可以是任意ECMAScript语言值。一个唯一的键值只能出现在地图集合中的一个键/值对中。使用创建地图时选择的比较算法来区分的不同键值。
Map对象可以按插入顺序迭代其元素。必须使用哈希表或其他机制来实现Map对象,这些机制通常平均提供与集合中元素数量成线性关系的访问时间。本Map对象规范中使用的数据结构仅用于描述Map对象所需的可观察语义。它并非旨在成为可行的实施模型。
…对我来说听起来还是一个对象,所以很明显我错过了一些东西。
为什么JavaScript获得了一个(被良好支持的)Map对象?它有什么作用?
根据mozilla:
Map对象可以按插入顺序对其元素进行迭代-for..of循环将为每次迭代返回[key,value]数组。
和
对象与Maps相似,两者都允许您将键设置为值,检索这些值,删除键以及检测是否在键处存储了某些内容。因此,对象在历史上一直被用作地图;但是,对象和地图之间存在重要差异,因此可以更好地使用地图。
对象具有原型,因此地图中包含默认键。但是,可以使用map = Object.create(null)绕过它。对象的键是字符串,其中键可以是Map的任何值。您可以轻松获取地图的大小,而不必手动跟踪对象的大小。
当键直到运行时才是未知的,并且所有键都是相同的类型并且所有值都是相同的类型时,请在对象上使用映射。
当存在对单个元素进行操作的逻辑时,请使用对象。
有序可迭代性是开发人员长期以来一直希望使用的功能,部分原因是它确保了所有浏览器的相同性能。所以对我来说,那是很大的。
该myMap.has(key)方法将特别方便,而且myMap.size属性也很方便。
myMap.has(key)
myMap.size