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

本文探讨了JavaScript中对象的传值与传址的区别,解释了如何避免修改一个对象时另一个对象发生变化的问题,并介绍了基础类型与引用类型的特性。

问题:

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值