原因:JavaScript 中对象的赋值是默认引用赋值的(两个对象指向相同的内存地址)
示例:
// 定义对象a
var a={name:"张三",sex:"男"};
// 将对象a赋值给对象b
var b=a;
//输出 对象b,对象a
console.log(b,a);
//结果:{name: "张三", sex: "男"};{name: "李四"sex: "男"}
// 修改b对象中的name属性,
b.name="李四";
//查看修改后的对象
console.log(b,a).
//输出的结果可以发现:发现修改b中的属性时,a对应的属性也被修改,
//结果:{name: "李四", sex: "男"};{name: "李四", sex: "男"}
//解决办法一:
b=Object.assign({},a);
console.log(b,a)
//修改b中的属性 查看效果
b.name="王五"
console.log(b,a)
//结果明显。打到了想要的效果
//结果:{name: "王五", sex: "男"};{name: "李四", sex: "男"}
数组对象的话,可以这样 解决办法二:
var a=["张三","李四"];
var b=a;
console.log(b,a);
//结果: ["张三", "李四"];["张三", "李四"]
b[0]="王五";
console.log(b,a);
//结果:["王五", "李四"];["王五", "李四"]
var b=[...a];
b[0]="赵六"
console.log(b,a);
//结果:["赵六", "李四"] ;["王五", "李四"]