问题描述
浅复制是复制引用,复制后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响,下面例子中我新建一个obj对象,然后浅复制了一个新对象newObj出来,为什么我操作obj里面的数组arr,新对象newObj会有变化,而我直接修改obj.name属性,新对象newObj却没有变化,
问题出现的环境背景及自己尝试过哪些方法
相关代码
//浅复制
function simpleClone(obj){
var simpleCloneObj = {};
for(var item in obj){
simpleCloneObj[item] = obj[item]
}
return simpleCloneObj
}
var obj = {
name:"dabao",
age:28,
arr:[1,3,5]
}
var newObj = simpleClone(obj);
obj.arr.push(0);
obj.name = 'hello';
console.log(newObj);
console.log(obj);
你期待的结果是什么?实际看到的错误信息又是什么?
我理解的浅复制,是新对象被浅复制出来后,原对象的属性值得改变都会在复制出来的新对象里面有体现,不知道为什么属性没有变化?
你写的方法相当于
newObj.name = obj.name
name,age
是字符串,数字 是基本类型 所以复制的是值不是引用arr
不是基本类型 所以复制的是引用想实现你说的 修改一个改变另一个 直接
newObj = obj
就行了