白狗子的博客

「天上浮云如白衣,斯须改变如苍狗。」——杜甫

JavaScript-面试-深浅拷贝

2026年10月16日·Admin·3 次浏览

面试题:浅拷贝与深拷贝?常见实现与坑?

浅拷贝

只拷贝第一层,嵌套对象/数组共享引用。

常见浅拷贝:Object.assign、{...obj}、[].concat(arr)、arr.slice()、Array.from(arr)。

深拷贝

递归(或迭代)复制多层,嵌套互不干扰。

简易方案与局限

  • JSON.parse(JSON.stringify(x)):丢 **undefined、函数、Symbol、循环引用**;Date 变字符串;Map/Set` 不支持。
  • structuredClone(现代浏览器/Node 17+):支持更多类型,仍对函数、原型链、部分对象有限制,循环引用可处理。

手写要点(面试)

  • WeakMap 记录已拷贝对象,处理循环引用。
  • 区分 数组 / 普通对象 / Date / RegExp 等(按需求扩展)。
  • 循环引用无处理会栈溢出。

赋值 vs 拷贝

const b = a 是同一引用,不是拷贝。

© 2025 My Blog. Built with Nuxt.js v4