面试干货!JavaScript 浅拷贝你真的会吗?

30 阅读3分钟

面试干货!JavaScript 浅拷贝你真的会吗?

在 JavaScript 面试中,浅拷贝 vs 深拷贝是经常考查的基础概念。今天我们就通过几段真实截图,带你“入门即精通”。

一、浅拷贝是什么?

浅拷贝是指仅拷贝对象的第一层属性,而对于嵌套的对象或数组,则依然保留对原始引用。简单来说,一级属性独立,嵌套结构共享。


二、实战截图解析

  1. 目标对象被修改
    第一张图展示了 Object.assign(target, source) 后,target 除了接收 source 的属性,还被直接改变,这说明浅拷贝会改写 target 变量本身。 image.png
  2. 后面的覆盖前面
    第二张图中,source 中的属性会覆盖 target 中相同的属性,这也是 Object.assign 的预期行为。(MDN Web Docs)

image.png 3. 引用类型共享问题
第三张是典型面试题:浅拷贝后对嵌套数组或对象的修改,会反映在源对象和拷贝对象身上。这就是引用被共享的后果。(CarlosRojasDev, Medium, JavaScript教程)

image.png


三、何时用浅拷贝,何时用深拷贝?

数据结构类型使用建议
只有一层属性的对象(扁平对象)使用浅拷贝即可,性能更优
包含嵌套对象/数组等引用类型推荐使用深拷贝,避免共享引用引发问题

常见深拷贝实现方式:


四、面试高频问答总结

  • Object.assign 是浅拷贝还是深拷贝?
    :浅拷贝,只复制第一层属性,对于引用类型仍是共享引用。(Stack Overflow, CarlosRojasDev, JavaScript教程)
  • :浅拷贝能完整隔离修改吗?
    :只能隔离最外层属性的修改,内层嵌套对象变动仍会互相影响。
  • :深拷贝推荐方法?
    :简单数据结构用 JSON.stringify + JSON.parse,现代项目建议用 structuredClone() 或更强大的 cloneDeep 函数/库。

总结

这三张图真实反映了面试常问的三个点:浅拷贝会改变 target,对象属性覆盖行为,以及嵌套引用共享的问题。掌握这些再背上常见实现方式及区别,面试官问“你对 JavaScript 拷贝了解多少?”你就有底气答上来!


希望这篇博客草稿能帮到你啦,有什么想加的内容也可以随时告诉我!