javascript深拷贝

js浅拷贝与深拷贝

基本数据类型不会存在浅拷贝,引用数据类型存在浅拷贝

深拷贝方法

一、纯数组拷贝:(仅限于不嵌套)

1,for循环:

var arr1 = [1, 2, 3];
var arr2 = [];
for (var i = 0; i < arr1.length; i++) 
  {arr2.push(arr1[i]);}

2.concat()

var arr1 = [1, 2, 3];
var arr2 = arr1.concat();

3.slice()

var arr1 = [1, 2, 3];
var arr2 = arr1.slice(0);

4.ES6:…语法
也可以拷贝对象,但是仅限于不嵌套的情况

var arr1=[1,2,3,4,5,]
var arr2=[...arr1]

二、对象的深拷贝

1.JSON.parse+JSON.stringify:内部可嵌套对象或数组

var obj1 ={name:"jack",age:18};
var obj2=JSON.parse(JSON.stringify(obj1))

缺点:undefined、function、symbol 会在转换过程中被忽略

三、综合深拷贝

自己编写:

// 深拷贝函数封装
    function deepCopy(obj) {
      // 根据obj的类型判断是新建一个数组还是对象
      let newObj = Array.isArray(obj)? [] : {};
      // 判断传入的obj存在,且类型为对象
      if (obj && typeof obj === 'object') {
        for(key in obj) {
          // 如果obj的子元素是对象,则进行递归操作
          if(obj[key] && typeof obj[key] ==='object') {
            newObj[key] = deepCopy(obj[key])
          } else {
          // // 如果obj的子元素不是对象,则直接赋值
            newObj[key] = obj[key]
          }
        }
      }
      return newObj // 返回新对象
    }
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值