zoukankan      html  css  js  c++  java
  • 对象赋值问题(对象赋值影响原对象)

    问题示例:

    直接用=的方式把一个对象赋值给另一个对象,会导致修改新对象时,原对象也发生变化

    var obj1 = {'age': '10','friends':{'Aymi':'12','Jack':'9'}};
    var obj2 = obj1;   //obj1赋值给新对象obj2
    obj2.age = '20';   //修改obj2的age值
    console.log(obj1.age); //'20'   //obj1中的age值也改变了
    

    问题原因:

    JavaScript 中对象的赋值是默认引用赋值的(两个对象指向相同的内存地址),所以修改另一个对象时,即修改了内存地址里的对象,其他关联对象也会改变

    解决方法:

    • 转换类型法:obj2=JSON.parse(JSON.stringify(obj1))
    • es6之Object.assign()法:obj2=Object.assign({},obj1)
      注:Object.assign()方法有不足之处,Object.assign()只是让对象里第一层的数据没有了关联性(即修改obj2.age时obj1.age不会发生变化),但是对象内的对象则跟被复制的对象有着关联性的(即当修改更深层的obj2.friends.Aymi的值时,原对象obj1.friends.Aymi也跟着发生了变化)
      所以推荐使用obj2=JSON.parse(JSON.stringify(obj1))这种方法

    更详细介绍参考

    https://www.cnblogs.com/c2016c/articles/9328725.html

  • 相关阅读:
    【微服务架构】SpringCloud之Ribbon
    SpringCloud之Eureka(注册中心集群篇)
    Eureka简介
    两行代码 搞定计数
    HBase详细概述
    电商项目介绍---说的很好
    面试:----Nginx的一理解
    redis介绍
    Linux操作系统介绍
    什么是Solr
  • 原文地址:https://www.cnblogs.com/huihuihero/p/11981665.html
Copyright © 2011-2022 走看看