标签:console day28 name --- key obj 拷贝 log
文章目录
浅拷贝
Object.assign
let Person = {
name: '123',
arr:[1,2,3]
}
var person = {}
// 对于引用类型只是浅拷贝
Object.assign(person, Person) //浅拷贝
person.name = "111"
person.arr.push(456)
console.log(person === Person) //false
console.log(person.name) //111
console.log(Person.name) //123 // 没同步
console.log(Person.arr); // [ 1, 2, 3, 456 ] 同步了
深拷贝
JSON
obj = {
name: "tom",
id: 18,
goods: {
id: 123
},
list: [1, 23, 1, 4]
}
function deepClone(obj) {
let result = JSON.parse(JSON.stringify(obj));
return result;
}
console.log(deepClone(obj))
存在问题 无法拷贝function undefined
第三方库lodash
手写一个深拷贝
let obj = {
name: '123',
arr: [1, 2, 3],
userdata: {
likes: ["玩", "ci"]
}
}
function deepCopy(obj){
let objClone = Array.isArray(obj)?[]:{};
if(obj && typeof obj =="object"){
for(key in obj){
if(typeof obj[key]=="object"){
objClone[key]=deepCopy(obj[key])
}else{
objClone[key] = obj[key]
}
}
}
return objClone;
}
let newObj=deepCopy(obj)
newObj.userdata.likes.push("456")
newObj.userdata.likes[0]="和"
console.log(newObj,obj);
标签:console,day28,name,---,key,obj,拷贝,log 来源: https://blog.csdn.net/qq_42451776/article/details/119078522
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。