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

标签 javascript performance object jsperf

首先,我制作了一个快速的 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)。这意味着您可以直接从对象访问 toStringhasOwnProperty 等方法,但如果需要也可以覆盖它们——尽管您应该尽可能避免这种情况。至于性能,差异非常很小,对象只有两个属性(如 jsperf 所示)。如果您的对象具有成百上千个属性,则差异几乎不存在。

总而言之,如果您不希望您的代码执行得更好,您应该始终力求清晰并尝试改进代码的高级算法设计(并不是说您还没有这样做);并且仅在绝对必要时才担心微优化。

关于javascript - 使用 Object.create(null) 创建空对象的影响和好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294030/

相关文章:

loops - 遍历对象数组

java - java中类对象的引用

JavaScript 正则表达式 : How to extract an "id" from a string?

javascript - 如何使用不同表中的列数据从其他表中获取数据?

c# - PermCheck codility。 O(N) 时间复杂度

jquery 选择器,条件 "attribute"小于

performance - Python 3 多处理 : optimal chunk size

java - 不理解嵌套类型

javascript - 使用 jquery 地址或至少使用 ajax 时出现另一个 IE 错误 : stack overflow at line 0,

javascript - 将 JSON 字符串转换为 Javascript 数组