You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用Object.assign克隆对象后删除属性仅影响克隆对象?

为什么删除克隆对象的属性不会影响原对象?

嘿,这个问题其实涉及到 JavaScript 里浅拷贝的核心逻辑,咱们一步步拆解来理解:

1. Object.assign() 做了什么?

当你执行 const object2 = Object.assign({}, object1) 时,它完成的是浅拷贝操作:

  • 对于 object1 里的顶层基本类型属性(比如 b: 2、c: 3),会直接把值复制到新创建的空对象里;
  • 对于 a 这种引用类型属性(它的值是另一个对象),并不会复制整个内部对象,而是把内存引用地址复制给了 object2.a。也就是说,object1.a 和 object2.a 指向的是内存中同一个对象。

2. delete object2.a 到底删了什么?

delete 操作的作用是移除对象自身的某个属性键,而不是修改属性指向的值。当你执行 delete object2.a 时:

  • 你只是从 object2 这个对象的属性列表里移除了 a 这个键,相当于把 object2 和那个内部对象的关联切断了;
  • 但 object1 的属性列表里依然保留着 a 这个键,并且还指向原来的内部对象,所以 object1 完全不受这个操作的影响。

3. 额外对比:如果修改属性值会怎样?

如果咱们不是删除 object2.a,而是修改它的子属性,比如 object2.a.d = 100,那 object1.a.d 也会变成100——因为两者指向同一个内部对象。但 delete 是直接操作对象的属性键,和共享的内部对象无关,所以才会出现你看到的结果。

看你的代码输出也能印证这一点:执行 delete 前两个对象结构完全一致,执行后 object2 丢失了 a 属性,但 object1 的 a 属性依然完好。

内容的提问来源于stack exchange,提问作者Martial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:10:46