JavaScript中Object对象 和 Map对象 的比较

Map对象

Map 对象保存键值对。任何值(对象,数组,字符串,数值,布尔,null,undefined) 都可以作为一个键或一个值。

Map.prototype.size -- 返回Map对象的键/值对的数量。

Map.prototype.clear() -- 移除Map对象的所有键/值对 。

Map.prototype.delete(key) -- 如果 Map 对象中存在该元素,则移除它并返回 true;否则如果该元素不存在则返回 false

Map.prototype.forEach(callbackFn[, thisArg])  -- 按插入顺序,为 Map对象里的每一键值对调用一次callbackFn函数。如果为forEach提供了thisArg,它将在每次回调中作为this值。

Map.prototype.get(key) -- 返回键对应的值,如果不存在,则返回undefined。

Map.prototype.has(key) -- 返回一个布尔值,表示Map实例是否包含键对应的值。

Map.prototype.keys() -- 返回一个新的 Iterator对象, 它按插入顺序包含了Map对象中每个元素的键 

Map.prototype.set(key, value) -- 设置Map对象中键的值。返回该Map对象。

Map.prototype.values() -- 返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的 。

Object对象

Object 构造函数创建一个对象包装器。内容为成对的名称(字符串)与值(任何值),其中名称通过冒号与值分隔。

Object.length -- 值为 1。

Object.defineProperty() -- 给对象添加一个属性并指定该属性的配置。

Object.defineProperties() -- 给对象添加多个属性并分别指定它们的配置。

Object.entries() -- 返回给定对象自身可枚举属性的 [key, value] 数组。

Object.keys() -- 返回一个包含所有给定对象自身可枚举属性名称的数组。

Object.setPrototypeOf() -- 设置对象的原型(即内部 [[Prototype]] 属性)。

Object.values() -- 返回给定对象自身可枚举值的数组。

比较

Objects 和 Maps 类似的是,它们都允许你按键存取一个值、删除键、检测一个键是否绑定了值。因此(并且也没有其他内建的替代方式了)过去我们一直都把对象当成 Maps 使用。不过 Maps 和 Objects 有一些重要的区别,在下列情况里使用 Map 会是更好的选择:

  • 一个Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
  • Map 中的键值是有序的,而添加到对象中的键则不是。因此,当对它进行遍历时,Map 对象是按插入的顺序返回键值。
  • 你可以通过 size 属性直接获取一个 Map 的键值对个数,而 Object 的键值对个数只能手动计算。
  • Map 可直接进行迭代,而 Object 的迭代需要先获取它的键数组,然后再进行迭代。
  • Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。虽然 ES5 开始可以用 map = Object.create(null) 来创建一个没有原型的对象,但是这种用法不太常见。
  • Map 在涉及频繁增删键值对的场景下会有些性能优势。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值