JS手写代码实现深拷贝
/**
* 深拷贝
*/
const obj1 = {
age: 20,
name: 'xxx',
address: {
city: 'beijing'
},
arr:['a', 'b', 'c']
}
const obj2 = obj1
obj2.address.city = 'shanghai'
console.log(obj1.address.city)
const obj3 = deepClone(obj1)
obj3.address.city = 'weihai'
console.log(obj1.address.city)
/**
* 深拷贝
* @param {Object} obj 要拷贝的对象
*/
function deepClone(obj = {}) {
if(typeof onj !== 'object' || obj == null){
// obj是null,或者不是对象和数组,直接返回
return obj
}
// 初始化返回结果
/**
* instanceof与typeof的区别
* [1]typeof:主要用来判断基础数据类型,比如:Number、String 等等。
* [2]instanceof:主要用来判断对象数据类型
* [3]typeof 直接返回数据类型,而 instanceof 重在判断,它返回布尔值。
*/
// 判断对象是否是数组
if(obj instanceof Array) {
result = []
} else { // 不是数组的话就是对象
result = {}
}
for (let key in obj){
// 保证key不是原型的属性
if (obj.hasOwnProperty(key)) {
// 递归调用!!!
result[key] =deepClone(obj[key])
}
}
// 返回结果
return result
}
全栈爱好者,欢迎交流学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏