【问题标题】:Is there any advantage to using Object.create(null) over a Map?在 Map 上使用 Object.create(null) 有什么好处吗?
【发布时间】:2022-01-05 19:47:57
【问题描述】:

我见过人们使用看起来像这样的代码

const STUFF_MAP = Object.create(null);

STUFF_MAP 只建议像地图一样使用,所以我理解为什么使用Object.create(null){} 更好(删除可能导致冲突等的属性),但有什么好处不仅仅是使用

const STUFF_MAP = new Map();

我什么时候会使用每一个?和编译到pre es6有关系吗?

【问题讨论】:

  • 我认为该代码可能早于Map 类型。
  • 几乎没有理由使用Object.create(null),只需使用{}
  • Maps 对于可以用作键的内容更加灵活,但除此之外它们与使用普通对象并没有太大区别。
  • 但是您以不同的方式访问它们,因此它们不可互换。
  • 我对此表示怀疑,但您必须对其进行基准测试。

标签: javascript dictionary javascript-objects es6-map


【解决方案1】:

和编译成pre es6有关系吗?

是的,Object.create(null) 是 ES5,如果您需要支持旧浏览器,则不需要为 Map 使用 polyfill。

除此之外,您应该更喜欢更现代的Map,它也清楚地表明了变量的用途。您需要使用has/get/set 方法访问集合,而不是in 运算符/括号语法/赋值。这有时会导致代码不够简洁,例如对于incrementing a value,您不能使用复合赋值运算符。

至于性能,应该差别不大;如果您关心,请针对您的特定情况进行基准测试。

【讨论】:

    猜你喜欢
    • 2020-12-22
    • 2012-07-17
    • 2015-11-22
    • 2011-04-24
    • 2018-01-29
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多