Object.defineObject,重用对象或对象文字表示法

Object.defineObject, reuse object or object literal notation

本文关键字:对象 文字 表示 defineObject Object      更新时间:2023-09-26
var obj = {};
Object.defineProperty(this, 'foo', void (obj.value = 0) || obj);
Object.defineProperty(this, 'foo2', void (obj.value = 1) || obj);

与。

Object.defineProperty(this, 'foo', {value:0});
Object.defineProperty(this, 'foo2', {value:1});


两者似乎都运行得一样快,但前者对 gc 来说会更好吗?

选项

B 创建两个临时对象,而选项 A 仅创建一个。然而,选项 B 中的临时对象可以立即获得 GC,并且理论上可以比选项 A 中的临时对象更容易优化,后者一直存在到您声明它var的块结束。

在性能上几乎没有实际差异;在这个级别摆弄是过早的优化(通常不可能在所有浏览器中选择最快的版本)。你应该选择选项 B,它是更具可读性和惯用性的 JavaScript。

FWIW 对我来说(在 Ubuntu 13.04 64 位上),在五次尝试中测试 100k 运行会导致在 Firefox 或 Chrome 中始终保持更快(即随机噪声大于性能的任何差异)。