慕的地9557871
2022-01-06 14:49
老师,我用你的浅拷贝的方式,但是不对啊,打印出来两个对象不一样,按说浅拷贝打印出来是一样的,您帮我看一眼
你改变的值是字符串属于原始数据类型,打印出来当然不一样啦,改变对象里面的值打印出来是一样的
因为你的a/b是基本类型,这位老师说的浅拷贝的定义不太精确,如果按他的定义的话直接定义const objNew = obj都可以实现他定义的浅拷贝了。
但浅拷贝的意思应该是只拷贝第一层的基本类型数据,其他类型直接引用,你改的是对象里的基本数据类型,所以是可以的。但如果你加一个复杂类型,就像视频说的那样了。
var obj = {
a: "hello",
b: {
a:'world',
b: 111
},
c: [11, "jack", "tom"]
}
function simpleClone (objNew) { // 浅拷贝
var obj = {};
for (var i in objNew) {
obj[i] = objNew[i]
}
return obj;
}
var objCopy = simpleClone(obj);
objCopy.b.a = "word1" // 引用类型 浅拷贝
objCopy.a = "word1234" // 原始类型 深拷贝
console.log(obj);
console.log(objCopy);
直面JavaScript中的30个疑难杂症
14383 学习 · 20 问题
相似问题