Javascript 如何优化对象写入性能?

Javascript 如何优化对象写入性能?,javascript,performance,object,Javascript,Performance,Object,如果有两个像这样的对象: let obj1 = { foo: 'bar', bar: 'foo' }; let obj2 = { foo: 'foo', bar: 'bar' }; 我想把obj2的键foo的值改为其他值,比如其他值 最有效的方法是什么 obj2.foo = 'some other value'; 或 你描述的第二种方式要慢得多。通过使用扩展语法,可以将obj2的每个属性复制到一个新对象中,然后修改(覆盖)其中一个属性。如果您认为obj2有很多很多属性或者存储了很多信息,那么

如果有两个像这样的对象:

let obj1 = { foo: 'bar', bar: 'foo' };
let obj2 = { foo: 'foo', bar: 'bar' };
我想把obj2的键foo的值改为其他值,比如
其他值

最有效的方法是什么

obj2.foo = 'some other value';


你描述的第二种方式要慢得多。通过使用扩展语法,可以将
obj2
的每个属性复制到一个新对象中,然后修改(覆盖)其中一个属性。如果您认为obj2有很多很多属性或者存储了很多信息,那么这将是非常昂贵的


在第一种方法中,比如说
obj2.foo='someothervalue'
,内部需要做的就是获取
obj2
内存中的地址,跳转到
foo
所在的某个偏移量,并更改该内存包含的内容。

直接赋值比其他赋值更快。最后一种方法涉及-从旧对象扩展的属性创建新对象,并覆盖属性值,与其他方法相比,这涉及更多操作。


obj2.foo='someothervalue'更快。第二种方法除了克隆
obj2
性能之外还有额外的开销,第二种方法还将中断对
obj2
的任何引用,因为您要用一个新对象替换它。他们做的事情非常不同。您想要哪一个?更改对象的属性,还是创建一个新对象并更改变量?为什么您希望通过使用复杂的代码来获得更好的性能?在我的机器(macOS上的Firefox)上,差异甚至更大。我的测试前两次超过了11亿,第三次超过了750万。
obj2 = { ...obj2, foo: 'some other value'};