js深浅拷贝

js深浅拷贝讲到深浅拷贝 涉及到 JavaScript 的数据类型 js 中的数据类型分为基础型和引用型 基础型存储在栈中 引用类型存储在堆中 基础类型并没有深浅拷贝之说 这里所说的深浅拷贝针对的是引用类型数据而言 牢牢记住这句 通俗点讲 区分深 浅拷贝 就是假设 B 复制了 A 当修改 A 时 如果 B 也跟着变了 说明这是浅拷贝 如果 B 没变 那就是深拷贝 for in 循环遍历所有可枚举的属性的键 包括继承来的

讲到深浅拷贝,涉及到JavaScript的数据类型。js中的数据类型分为基础型和引用型。基础型存储在栈中,引用类型存储在堆中。

基础类型并没有深浅拷贝之说,这里所说的深浅拷贝针对的是引用类型数据而言(牢牢记住这句)。

通俗点讲,区分深/浅拷贝,就是假设B复制了A,当修改A时,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝。

for..in循环遍历所有可枚举的属性的键,包括继承来的属性的键。

Object.keys()返回所有自有可枚举属性的键。

Object.values()(ES7)返回所有可枚举属性的值。

Object.entries()(ES7)可返回所有可枚举属性的键和值。

实现深拷贝的方法:

1.递归

function deepCopy(obj){ let objCopy = Array.isArray(obj)?[]:{}; if(obj && typeof obj==="object"){ for(key in obj){ if(obj.hasOwnProperty(key)){ if(obj[key]&&typeof obj[key] ==="object"){ objCopy[key] = deepCopy(obj[key]); }else{ //如果不是,简单复制 objCopy[key] = obj[key]; } } } } return objCopy; } let a=[1,2,3,4], b=deepCopy(a); a[0]=2; console.log(a,b);

2.除了递归,我们还可以借用JSON对象的parse和stringify

function deepClone(obj){ let _obj = JSON.stringify(obj), objClone = JSON.parse(_obj); return objClone } let a=[0,1,[2,3],4], b=deepClone(a); a[0]=1; a[2][0]=1; console.log(a,b);

3.除了上面两种方法之外,我们还可以借用JQ的extend方法。

let a=[0,1,[2,3],4], b=$.extend(true,[],a); a[0]=1; a[2][0]=1; console.log(a,b);

4.该博客结合数组去重那篇博客,再去看看之前的自选功能博客,会发现有很大的优化空间!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217042.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:28
下一篇 2026年3月18日 上午10:29


相关推荐

  • Python中三维数组位置详解

    Python中三维数组位置详解图示效果图 nbsp nbsp 直接贴代码 deftest3D nbsp nbsp importnumpya nbsp nbsp data array np zeros 3 5 6 dtype np int nbsp nbsp data array 1 2 2 1 nbsp nbsp nbsp print data array nbsp nbsp 介绍 通过 np zeros 创建一个 3 行 5 列 6 个通道的三维数组 并给第二

    2026年3月16日
    2
  • delphi中的ActionList使用方法

    delphi中的ActionList使用方法DelphiAction 详解 nbsp 一个友好的用户界面 必须具有下拉菜单 弹出菜单 工具条和快捷键 同样一个功能 程序员可能要提供几种操作方式 如文本拷贝 菜单命令 amp Copy 快捷键 Ctrl C 工具条上的拷贝按钮 都是程序员提供给用户的操作 可以大大方便了不同层次的用户 但是 多增加一种操作方式 就意味着增加响应事件的代码 还有 实现统一功能的多个操作必须一致 如剪切板上不为空的时候 菜

    2026年3月26日
    1
  • 如何解决tomcat启动闪退问题

    如何解决tomcat启动闪退问题在这几天,遇到一个Tomcat启动闪退的问题,通过查阅各种资料,算是完美解决。在此分享给朋友们。    首先,确定你的问题在哪里    1.查询错误:win+R输入cmd,进入一般处理程序。通过cd找到你Tomcat的bin文件夹,在bin下面输入startup.batrun运行,运行后,如果如(图1)提示,缺少JAVA_HOME或者缺少JRE_HOME(如

    2022年5月7日
    37
  • 机械键盘恢复出厂fn,机械键盘构成-求助,机械键盘fn键的解决方法

    机械键盘恢复出厂fn,机械键盘构成-求助,机械键盘fn键的解决方法fn 是功能键 非常易于使用 我使用 Rapoo 键盘的合金版本 效果很好 如何从结构和原理上拆卸机械键盘轴 原始的黑色轴由六个部分组成 轴体有两个触点 分别对应于静板和动板 静电膜负责传导 而静电膜影响回弹和声音 弹簧 下盖 上盖 开关盖总行程 4 0 4mm 触发行程 2 0 6mm 初始压力 触发压力 60 段压力 无段落描边 无注释 图片中 BLACKSWITCHL 中此开关的特征压力

    2026年3月18日
    2
  • 跨机器的文件传输

    跨机器的文件传输

    2022年2月22日
    63
  • ps快捷键

    ps快捷键

    2021年9月23日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号