面试题答案
一键面试使用 obj2 = obj1
- 优点:
- 性能高:这种方式只是简单地将
obj1
的引用赋给obj2
,执行速度非常快,几乎不消耗额外的性能。因为它没有创建新的对象,也没有遍历源对象的属性进行复制。
- 性能高:这种方式只是简单地将
- 缺点:
- 数据关联:
obj2
和obj1
指向同一个对象,对obj2
的任何修改都会直接影响到obj1
,反之亦然。如果在后续操作中需要独立操作两个对象,这种方式可能会导致难以察觉的错误。
- 数据关联:
- 适用场景:
- 当需要两个变量指向同一个对象,并且希望对其中一个变量的修改能同步反映到另一个变量时,例如在某些需要共享数据状态的场景下适用。
使用 Object.assign(obj2, obj1)
- 优点:
- 数据独立:会创建一个新的对象(如果
obj2
为空对象),将obj1
的属性复制到obj2
中,使得obj2
和obj1
是两个独立的对象(虽然属性值为对象或数组时仍是浅拷贝)。这在大多数需要独立操作对象的场景下非常有用,避免了意外的数据相互影响。
- 数据独立:会创建一个新的对象(如果
- 缺点:
- 性能消耗:它需要遍历
obj1
的所有可枚举属性,并将其复制到obj2
中,这在对象属性较多时会有一定的性能开销。而且对于嵌套对象或数组,只是浅拷贝,若要深拷贝还需额外处理,这会进一步增加复杂性和性能开销。
- 性能消耗:它需要遍历
- 适用场景:
- 当需要两个对象在逻辑上独立,即对一个对象的修改不影响另一个对象时适用。尤其是在处理简单对象,且不需要深拷贝的情况下,
Object.assign
提供了一种简单方便的对象复制方式。
- 当需要两个对象在逻辑上独立,即对一个对象的修改不影响另一个对象时适用。尤其是在处理简单对象,且不需要深拷贝的情况下,