使用Object.create(null)创建空对象的影响和好处

时间:2013-01-12 14:00:50

标签: javascript performance object jsperf

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

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

我指的是你要大量访问对象属性的情况,或者大量使用for in循环。

这种方法在图书馆中的使用风险太大,人们可能会导致这些对象不具备标准Object原型所带来的标准属性吗?

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

PS:我做了一个简短的测试用例来说明使用Object.create(null)和访问属性比使用{}更快一些的情况。
http://jsperf.com/js-object-creation-and-accessing-properties

1 个答案:

答案 0 :(得分:7)

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

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