整理下之前做的有点疑惑的js基础题目和大家分享以下,如果大家觉得有用,别忘了点一下赞哦
基本类型的"深拷贝"
const a = {x:1,s:{y:2}}
const b= {...a}//flag1
const c = {}
Object.assign(c,a)//flag2
a.x = 2
console.log(a.x)//2
console.log(b.x)//1
console.log(c.x)//1
a.s.y = 3
console.log(b)//{x:1,s:{y:3}}
console.log(c)//{x:1,s{y:3}}
这题的主要问题是
flag1处和flag2处的操作有什么区别
flag1处:相当于把 a对象展开了一层,再把这一层拷贝到一个新的对象,这样第一层中的基本类型的就不是通向同一个指针,而里面的引用类型的还是指向同一个指针
flag2处:Object.assign也是基本类型的深拷贝,可以认为是一个浅拷贝,只拷贝第一级
这里Object.assign 还可以实现浅比较(把两个对象合并成一个)
这个方法也是只比较第一级
const obj1 = {a:1,f:{c:2}}
const obj2 = {a:2,b:2,f:{d:5}}
console.log(obj1)//{ a: 2, f: { d: 5 }, b: 2 } 合并到obj1并返回
console.log(Object.assign(obj1,obj2))//{ a: 2, f: { d: 5 }, b: 2 }