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

问题:

声明变量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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值