分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

js深拷贝和浅拷贝

发布时间:2023-09-06 01:13责任编辑:胡小海关键词:js

  js中对象分为基本类型和复合(引用)类型。基本类型存放在栈内存,复合(引用)类型存放在堆内存。

  栈内存存放一些基本类型的变量和对象的引用变量,堆内存用于存放由new创建的对象。

      浅拷贝仅仅是指向被拷贝的内存地址,如果原地址中对象被改变了,那么浅拷贝出来的对象也会相应改变。

 ???????var obj = { ???????????a : 1, ???????????b : 2 ???????} ???????var obj1 = obj; ???????????obj1.b = 3; ???????console.log(obj1); //{a: 1, b: 3}
  ?  console.log(obj1===obj); ?//true

  深拷贝:我在想如何让obj1复制obj的对象内容,在我对obj1进行修改时,不影响obj。通过递归调用浅拷贝来解决。

 ???????let obj = { ???????????a : "1", ???????????b : "2", ???????????c : function col(){}, ???????????d : [1,2,3], ???????????e : { ???????????????f : "4" ???????????} ???????}
 ???????function deepCopy(obj){ ???????????if(typeof obj === "object"){ ???????????????if(obj.constructor === Array){ ???????????????????var newArr = []; ???????????????????for(var i = 0;i<obj.length;i++) newArr.push(obj[i]); ???????????????????return newArr; ???????????????}else{ ???????????????????var newObj = {}; ???????????????????for(var key in obj){ ???????????????????????newObj[key] = this.deepCopy(obj[key]); ???????????????????} ???????????????????return newObj; ???????????????} ???????????}else{ ???????????????return obj; ???????????} ???????}

简化:

 ???????function deepCopy(obj){ ???????????let temp = obj.constructor === Array?[]:{}; ???????????for(let val in obj){ ???????????????temp[val] = typeof obj[val] == ‘object‘ ? deepCopy(obj[val]) : obj[val]; ???????????} ???????????return temp; ???????} ???????console.log(deepCopy(obj));

 

js深拷贝和浅拷贝

原文地址:http://www.cnblogs.com/zhang-wang/p/7581215.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved