JS实现一个深浅拷贝

news/2024/7/10 22:42:41 标签: javascript, 前端, es6

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

javascript">const obj = {
    name: 'zs',
    age: 18,
    hobby: {
        sing: '中国红',
    },
};

浅拷贝

javascript">  //   浅拷贝 方法一 : Object.assign({}, obj)
  //   const subObj = Object.assign({}, obj);
  //   浅拷贝 方法二 : ...展开运算符号
  //   const subObj = { ...obj };

  //   此时修改第一层属性不会互相影响
  //   subObj.age = 10;
  //   console.log(subObj);
  //   console.log(obj);

  //   修改第二层属性会互相影响
  //   subObj.hobby.sing = '小红帽';
  //   console.log(subObj);
  //   console.log(obj);

  //   浅拷贝的第二层引用还是同一个地址
  //   console.log(subObj.hobby === obj.hobby);//true

深拷贝

javascript">//   深拷贝 : 递归
const deepCopy = (obj) => {
    if (typeof obj !== 'object') return
    const newObj = {};
    for (const key in obj) {
        newObj[key] = obj[key];
        if (typeof obj[key] === 'object') {
            newObj[key] = deepCopy(obj[key]);
        }
    }
    return newObj;
};
const newObj = deepCopy(obj);
newObj.hobby.sing = '小红帽';
obj.age = 10;
console.log(obj);
console.log(newObj);


http://www.niftyadmin.cn/n/1409204.html

相关文章

python api测试框架 github_可能是 Python 中最火的第三方开源测试框架 pytest

作者:HelloGitHub-Prodesire一、介绍本篇文章是《聊聊 Python 的单元测试框架》的第三篇,前两篇分别介绍了标准库 unittest 和第三方单元测试框架 nose。作为本系列的最后一篇,压轴出场的是Python 世界中最火的第三方单元测试框架&#xff1a…

重构系统的套路-微服务化

2019独角兽企业重金招聘Python工程师标准>>> 服务拆分 根据业务或组织架构进行基本服务拆分,每个服务实例会拥有专属的网络地址、独立的计算资源,并且独立部署。客户端通过访问服务实例的地址来调用服务 API。不同服务也可以相互调用。 统一配…

java数据库连接池技术

Proxool、DBCP以及C3P0是最为常见的三种JDBC连接池技术。 介绍 C3P0  C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。 c3p0所需jar:c3p0-0.…

python最低薪资_最低15K,最高50K,Python薪资节节高,小白怎么学?

数据来自拉勾网市场需求大,应用前景广,可以说,现在是学Python最好的时候。1、编程语言这么多,为啥选Python编程语言有上百种,比如常见的C,C,Java,PHP,Java,Ru…

简单实现一个Promise

function MyPromise(fn) {pending 待定;fulfilled 成功;rejected 失败;// 定义初始化状态this.status pending;this.res null;this.ret null;// resolve 时的函数数组this.resolveCallBack [];// reject 时的函数数组this.rejectCallBack [];// 定义 resolve 和 reject…

Mac上打开多个Eclipse

Mac上打开多个Eclipse方法是:找到Eclipse.app的位置,在Terminal中cd到这个目录 然后执行: [html] view plaincopy open -n Eclipse.app 也可以直接将 Eclipse.app拉入到Terminal,在路径前面加上 open -n

经典编程书籍大全

2019独角兽企业重金招聘Python工程师标准>>> 经典编程书籍大全 100 经典技术书籍,涵盖:计算机系统与网络、系统架构、算法与数据结构、前端开发、后端开发、移动开发、数据库、测试、项目与团队、程序员职业修炼、求职面试 和 编程相关的经典…

new都做了什么,实现一个new

首先创建一个新的空对象根据原型链,设置空对象的__proto__为构造函数的prototype构造函数的this指向这个对象,并执行构造函数的代码(为这个新对象添加属性)判断函数的返回值类型,如果是引用类型,就返回这个引用类型的对象 function myNew(context,...args) {const obj new Obj…