8

首先,我做了一个快速的 jsperf 测试用例,以显示明显的 :比使用语法
Object.create(null)创建对象要慢得多。http://jsperf.com/js-object-creation-null-proto{}

但鉴于这一事实,前一种情况有时是否可以成为优化和性能方面的一个很好的选择?换句话说,操作最轻量级的 js 对象是否可以足够提高性能,以至于在某些情况下使用它成为一个合理的选择。

我指的是您将大量访问对象属性或大量使用 for in 循环的情况。

这种方法在库中使用是否风险太大,人们可能会被引导处理这些不拥有标准Object原型带来的标准属性的对象?

另外,您知道创建最轻量级 js 对象的另一种(更快)方法吗?

PS:我做了一个简短的测试案例来展示使用 aObject.create(null)和访问属性比 with 快一点的案例{}
http://jsperf.com/js-object-creation-and-accessing-properties

4

1 回答 1

8

我认为创建Object.create(null)通常不必要且不值得您牺牲浏览器兼容性和清晰度的对象。当您使用{}您本质上正在执行的语法创建Object.create(Object.prototype)一个对象时,它会创建一个可以访问Object.prototype. 这意味着您可以直接从对象访问方法toStringhasOwnProperty但也可以根据需要覆盖它们 - 尽管您应该尽可能避免这种情况。至于性能,差异非常小,对象只有两个属性(如 jsperf 所示)。如果您的对象有数百或数千个属性,则几乎不存在差异。

总之,如果你不想让你的代码表现得更好,你应该总是力求清晰,并尝试改进代码的高级算法设计(不是你还没有);并且仅在绝对必要时才担心微优化。

于 2014-01-18T20:04:43.660 回答