浅拷贝是指仅仅复制对象的引用,而不是复制对象本身;深拷贝则是把复制对象所引用的全部对象都复制一遍
补充
补充:浅拷贝只复制一层引用,新对象与原对象共享内层引用,修改内层数据会互相影响;深拷贝会递归复制所有层级的数据,得到一个完全独立的对象。常见实现方式:
- 浅拷贝 :
Object.assign({}, src)、{...src}、手写循环赋值、Array.prototype.slice等。- 深拷贝 :
- JSON 方案:
JSON.parse(JSON.stringify(obj)),简单但无法处理函数 / 循环引用 / Date / RegExp / Symbol / undefined 等;structuredClone():现代浏览器原生深拷贝,支持循环引用、Date、Map、Set 等,但不支持函数;- 递归手写 / Lodash
cloneDeep:通用、可处理函数和循环引用。
// 浅拷贝
const a = { x: 1, info: { name: 'foo' } }
const b = { ...a }
b.info.name = 'bar'
console.log(a.info.name) // 'bar'(共享内层引用)
// 深拷贝
const c = structuredClone(a)
c.info.name = 'baz'
console.log(a.info.name) // 'bar'(完全独立)
来源整理自:vue3js.cn 面试官系列



