如果有2个这样的对象:
let obj1 = { foo: 'bar', bar: 'foo' };
let obj2 = { foo: 'foo', bar: 'bar' };
我想将obj2的名为foo的键的值更改为其他值,例如some other value
。
最有效的方法是什么?
obj2.foo = 'some other value';
或
obj2 = { ...obj2, foo: 'some other value'};
答案 0 :(得分:2)
直接分配比其他分配更快。最后一种方法涉及-根据从旧对象扩展的属性创建一个新对象,并覆盖属性值,与其他方法相比,这涉及更多操作。 https://jsperf.com/obj-perf1122
答案 1 :(得分:0)
您描述的第二种方法要慢得多。通过使用传播语法,您正在将obj2
的每个属性复制到一个新对象中,然后修改(覆盖)其中一个属性。如果您考虑obj2
具有许多属性或存储大量信息,这将是昂贵的。
第一种方式,说obj2.foo = 'some other value'
,内部要做的就是获取obj2
内存中的地址,跳转到foo
所在的某个偏移量,然后进行更改该内存包含什么。