『JavaScript』何时使用 Map 来代替普通的 JS 对象( 二 )


『JavaScript』何时使用 Map 来代替普通的 JS 对象
本文插图
不管 actorMap 有一个名为toString的属性 , toString()方法都可以正常工作 。
3. map 是可迭代 为了遍历普通对象的属性 , 必须使用其他的辅助静态函数 , 如 Object.keys()或Object.entries():
『JavaScript』何时使用 Map 来代替普通的 JS 对象
本文插图
Object.entries(colorsHex) 返回从对象提取的键值对数组 。
但是 , map 本身是可迭代的:
『JavaScript』何时使用 Map 来代替普通的 JS 对象
本文插图
colorsHexMap是可迭代 。 可以在任何接受迭代的地方使用它:for()循环 , 展开运算符[...map] 。
map 提供了返回可迭代方法:map.keys() 遍历键 , map.values() 遍历值
4. map 的大小 普通对象的另一个问题是 , 您无法立马知道它包含的属性的数量 。
『JavaScript』何时使用 Map 来代替普通的 JS 对象
本文插图
要确定 exams 的大小 , 必须通过所有键来确定它们的数量 。
map 提供了 size 属性 , 表示属性的数量 。
【『JavaScript』何时使用 Map 来代替普通的 JS 对象】
『JavaScript』何时使用 Map 来代替普通的 JS 对象
本文插图
确定 map 的属性的数量更加简单:examsMap.size 。
总结 普通 JS 对象通常可以很好地保存结构化数据 , 但它们也有一些局限性:

  1. 只能用字符串或 sybmol 作为键
  2. 自己的对象属性可能会与从原型继承的属性键冲突(例如toString , constructor等) 。
  3. 对象不能用作键
所有这些问题都可以通过 map 轻松解决 。 而且 , 它们提供了诸如迭代器和易于进行大小查找之类的好处 。
不要将 map 当作普通对象的替代品 , 而应视为是普通对象补充 。
你还知道 map 比普通物体的其他好处吗?请在下方留言 。
原文:https://dmitripavlutin.com/maps-vs-plain-objects-javascript/作者:Dmitri Pavlutin 译者:前端小智 来源:dmitripavlutin