问题:
声明变量obj1,obj2=obj1,修改obj2的age字段,打印发现obj1的值也发生了改变
var obj1 = {
name: '张三',
age: 18,
sex: '男'
}
var obj2 = obj1;
console.log('obj2:', obj2)
obj2.age = 22
console.log('obj2:', obj2)
console.log('obj1:', obj1)
需求:
修改obj2后obj1值不发生改变
解决:
因为在给obj2赋值的时候,进行了传址操作(传址操作指的是在给obj2赋值的时候,存储的实际上是obj1的数据地址,而不是对obj1数据的拷贝或原始数据,所以当obj2数据修改的时候,是通过地址进行的修改,所以相同数据地址的obj1也发生了改变)
修改obj2赋值的方法
var obj2 = JSON.parse(JSON.stringfy(obj1));
拓展
传值指的是在对变量赋值时,是对原始数据进行了拷贝。拷贝数据与原始数据是相互独立互不影响的。对赋值后的数据进行修改,修改的只是拷贝的数据,对原始数据没有影响
根据数据的操作方式不同,可以将数据分为两大类型:基础类型和引用类型
基础类型:number类型、boolean类型和string类型,其操作方式为传值
引用类型:array类型、object类型、function类型,其操作方式为传址