// 手写深拷贝
function deepClone(source) {
// 1.判断传入的值是 Array 还是 Object
const targetObj = source.constructor === Array ? [] : {}
for (const key in source) {
if (source.hasOwnProperty(key)) {
if (source[key] && typeof source[key] === 'object') {
// 引用数据类型
targetObj[key] = source[key].constructor === Array ? [] : {}
targetObj[key] = deepClone(source[key])
} else {
// 基本数据类型
targetObj[key] = source[key]
}
}
}
return targetObj
}
let obj = {
name: '张三',
age: 18,
student: [{name: '小明'}],
}
let newObj = obj
newObj.name = "李四"
newObj.student = {}
console.log(obj===newObj); // true
手写深拷贝方法
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 ...
- 栈与堆 在 JavaScript 中也会将基本类型与对象类型称为值类型与引用类型。这个是因为基本类型中存储的是数据...
- 深复制和浅复制最根本的区别在于是否是真正获取了一个对象的复制实体,而不是引用。深拷贝和浅拷贝是只针对Object和...
- 壹 ❀ 引 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变...