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

zoo*_*oom 7 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

Eth*_*ynn 7

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

总而言之,如果您希望您的代码能够更好地执行,那么您应该始终努力提高清晰度并尝试改进代码的高级算法设计(而不是您尚未完成); 并且只在绝对必要时才担心微观优化.