首先,我制作了一个快速的 jsperf 测试用例来展示显而易见的东西:
Object.create(null)
比使用 {}
语法创建对象要慢得多。
http://jsperf.com/js-object-creation-null-proto
但考虑到这一事实,在优化和性能方面,前一种情况有时是一个很好的选择吗?换句话说,操作最轻量级的 js 对象是否可以充分提高性能,以至于在某些情况下使用它成为合理的选择。
我指的是您要大量访问对象属性或大量使用 for in 循环的情况。
在库中使用这种方法是否风险太大,人们可能会处理这些不拥有标准 Object
原型(prototype)带来的标准属性的对象?
另外,你知道另一种(更快)的方法来创建最轻量级的 js 对象吗?
PS:我做了一个简短的测试用例来展示使用 Object.create(null)
和访问属性比使用 {}
快一点的情况.
http://jsperf.com/js-object-creation-and-accessing-properties
最佳答案
我认为使用 Object.create(null)
创建对象通常是不必要的,不值得牺牲浏览器兼容性和清晰度。当您使用 {}
语法创建对象时,您实际上是在执行 Object.create(Object.prototype)
,这会创建一个可以访问 中的属性的对象对象.原型(prototype)
。这意味着您可以直接从对象访问 toString
和 hasOwnProperty
等方法,但如果需要也可以覆盖它们——尽管您应该尽可能避免这种情况。至于性能,差异非常很小,对象只有两个属性(如 jsperf 所示)。如果您的对象具有成百上千个属性,则差异几乎不存在。
总而言之,如果您不希望您的代码执行得更好,您应该始终力求清晰并尝试改进代码的高级算法设计(并不是说您还没有这样做);并且仅在绝对必要时才担心微优化。
关于javascript - 使用 Object.create(null) 创建空对象的影响和好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294030/