浅拷贝
只拷贝第一层的原始类型值,和第一层的引用类型地址。
方式
- 直接赋值
Object.assign()
深拷贝
拷贝所有的属性值,以及属性地址指向的值的内存空间
方式
- 递归调用实现深拷贝-存在 引用丢失 问题
function deepClone(obj) { if (!obj && typeof obj !== 'object'){ return } var newObj = toString.call(obj) === '[object Array]' ? [] : {} for (var key in obj) { if (obj[key] && typeof obj[key] === 'object') { newObj[key] = deepClone(obj[key]) } else { newObj[key] = obj[key] } } return newObj }
- 使用
JSON
方式-无法实现对象中 方法 的深拷贝const obj = { a: 1, b: 2, c: 3 } const newObj = JSON.parse(JSON.stringify(obj)) newObj.a = 4 console.log(obj) // { a: 1, b: 2, c: 3 } console.log(newObj) // { a: 4, b: 2, c: 3 }
网友评论