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 是同一引用,不是拷贝。