首页 > Web开发 > 详细

js深浅拷贝

时间:2020-02-05 11:16:06      阅读:61      评论:0      收藏:0      [点我收藏+]

首先要清楚js的数据类型,和存储方式(栈,堆)。

对象的赋值其实是将对象名存储在栈中,对应存储的值为堆中数据的引用指针。

基本数据类型的存储则是直接存储在栈中。

浅拷贝:如果对象的属性的值为对象,则保存的为对象的指针,修改指针指向对象的值,则两个对象均会发生变化

Object.assign({},obj1,obj2) 

obj = {...obj1}

深拷贝:两个对象互相不干扰,修改值不会有影响

1、obj1 = JSON.parse(JSON.stringify(obj2)) 这种方法只能深拷贝对象和数组,不能拷贝函数,循环引用(就是在对象的属性对应的值为对象本身),还不能拷贝(Date,RegExp,Error)

2、for in 循环递归

function deepClone(obj){
                  if(typeof obj ===‘object‘){
                     //判断obj类型,这里只考虑对象和数组 
                     //typeof 返回的值有7种,均为字符串类型 number,string,boolean,undefined symbol,function,object
                     const objClone = Array.isArray(obj)?[]:{};
                     for(let key in obj){
                         if(obj.hasOwnProperty(key)){
                             objClone[key] = deepClone(obj[key])
                         }
                     }
                     return objClone
                  }else{
                      //如果不是上面两种类型直接返回
                      return obj
                  }
            
            
            }

 

先写到这

js深浅拷贝

原文:https://www.cnblogs.com/yangdakuan/p/12262594.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!