美文网首页简友广场
43 JavaScript中的浅拷贝和深拷贝

43 JavaScript中的浅拷贝和深拷贝

作者: CurryCoder | 来源:发表于2020-06-08 22:30 被阅读0次

    技术交流QQ群:1027579432,欢迎你的加入!

    欢迎关注我的微信公众号:CurryCoder的程序人生

    1.浅拷贝与深拷贝

    • 浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用。
    • 深拷贝拷贝多层,每一级别的数据都会被拷贝。
    • Object.assign(target,sources),es6新增方法可以实现浅拷贝。
      <script>
          var obj = {
              id: 1,
              name: 'CurryCoder',
              msg: { // 更深层次的对象
                  age: 18,
                  address: 'earth'
              },
              color: ['pink', 'red']
          };
          //    浅拷贝
          var o = {};
          for (var k in obj) {
              o[k] = obj[k]; // 浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用。如只拷贝obj中msg的引用
          }
          console.log(o);
          o.msg.age = 30;
          console.log(obj);
          console.log('-------以下是ES6新增的浅拷贝方法--------');
          Object.assign(o, obj);
          console.log(o);
          o.msg.age = 60;
          console.log(obj);
      
          // 深拷贝
          var oldobj = {
              id: 1,
              name: 'CurryCoder',
              msg: { // 更深层次的对象
                  age: 18,
                  address: 'earth'
              },
              color: ['pink', 'red']
          };
      
          var res = {};
          function deepCopy(target, sources) {
              for (var k in sources) {
                  // 判断sources[k]属于哪种数据类型
                  var item = sources[k];
                  // 判断是否是数组
                  if (item instanceof Array) {
                      target[k] = [];
                      deepCopy(target[k], item);
                      // 判断是否是对象
                  } else if (item instanceof Object) {
                      target[k] = {};
                      deepCopy(target[k], item);
                      // 判断是否是简单数据类型
                  } else {
                      target[k] = item;
                  }
              }
          }
          console.log('------深拷贝-------');
          deepCopy(res, oldobj);
          console.log(res);
          res.msg.age = 44;
          console.log(oldobj);
      </script>
      

    2.资料下载

    相关文章

      网友评论

        本文标题:43 JavaScript中的浅拷贝和深拷贝

        本文链接:https://www.haomeiwen.com/subject/igadtktx.html