首先,我做了一个快速的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
答案 0 :(得分:7)
我认为使用Object.create(null)
创建对象通常是不必要的,并且不值得您牺牲浏览器兼容性和清晰度。使用{}
语法创建对象时,您实际上正在执行Object.create(Object.prototype)
,这会创建一个对象,可以访问Object.prototype
中的属性。这意味着您可以直接从对象访问toString
和hasOwnProperty
等方法,但如果您愿意,也可以覆盖它们 - 尽管您应该尽可能避免这种情况。至于性能,差异是非常小,对象上只有两个属性(如jsperf所示)。如果您的对象有数百或数千个属性,则差异几乎不存在。
总之,如果你不想让你的代码表现得更好,那么你应该总是力求清晰,并尝试改进你的代码的高级算法设计(不是你还没有);并且只在绝对必要时才担心微观优化。