js赋值改变后,原数据也发生改变

it2022-05-05  158

问题:

声明变量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类型,其操作方式为传址


最新回复(0)