• js中的深拷贝与浅拷贝


    深拷贝与浅拷贝

      浅拷贝:只是复制第一层属性;浅拷贝其实只是引用的拷贝,两者还是指向内存中的同一个地址

      深拷贝:通过递归的方式复制所有的属性;深拷贝就是两者指向不同的内存地址,是真正意义上的拷贝。 

    实现浅拷贝的方法

    • 通过es6的解构方式进行拷贝
    • let newArr = [...arr]
    • 通过es6引入的新方法进行拷贝【这里是将target后的多个对象全部合并到target对象中,并返回一个新的完整对象】
    • let newobj = Object.assign(target, ...others)

    实现深拷贝的方法

    • 通过递归的方式进行拷贝
    • function deepCopy(target,source){
          for(let index in source){
              if(typeof source[index] === "object"){
                  target[index] = {};
                  deepCopy(target[index],source[index])
              }else{
                  target[index] = source[index];
              }
          }
      }
      let b = {a:1,d:{b:1}};
      let a = {};
      deepCopy(a,b);
       a.d.b = 4;
      console.log(b)
    • 通过JSON的方式进行拷贝
    • let newObj = JSON.parse(JSON.stringify(obj))
    • 通过jQuery的extend方法实现深拷贝
    • var array = [1,2,3,4];
      var newArray = $.extend(true,[],array);
    • Object.assign()拷贝
    •   当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。
    • lodash函数库实现深拷贝

      lodash很热门的函数库,提供了 lodash.cloneDeep()实现深拷贝。

  • 相关阅读:
    css中优先级与层叠
    微服务通过feign.RequestInterceptor传递参数
    maven详解
    Java8新特性interface中的static方法和default方法
    设计模式六大原则---转
    MySQL主从复制作用和原理
    Mysql Binlog三种格式详细介绍
    分布式主键生成逻辑总结--转
    java幂等性的解决方案
    spring事务的传播机制新解
  • 原文地址:https://www.cnblogs.com/Ky-Thompson23/p/12545600.html
Copyright © 2020-2023  润新知