javascript深浅拷贝的实现和区别

2023-05-16

  • 什么是深拷贝和浅拷贝

所谓拷贝就是赋值,把a的值赋值给b

  • 区别

最明显的区别就是:把a的值赋值给b,然后你改变b,看a会不会有变化,如果a变了那就是浅拷贝,如果a没有变那么就是深拷贝。

基本类型:拷贝的值和名字都会储存在栈中
引用类型:拷贝的值会储存在堆中,名字会存在栈中,即就是在栈中存的是指向堆中值的地址

  • 使用场景

当你在项目中想使用这里的数据,但又不能改变原数据的情况下。

  • 实现深浅拷贝的方法
  1. 递归
// 功能:深浅拷贝的封装
// 参数:源对象
// 返回值:拷贝后的值
function copy(obj){
    let objNew  = Array.isArray(obj)?[]:{};
    for(let key in obj){
        if(typeof obj[key] == "object"){
            objNew[key]=copy(obj[key]);
        }else{
            objNew[key] = obj[key];
        }
    }
    return objNew;
}
  1. 利用JSON.stringify和JSON.parse来实现,这种方式无法实现对象中方法的深拷贝会显示为undefined

  2. 通过jQuery的extend方法实现深拷贝。

var array = [1,2,3,4];
var newArray = $.extend(true,[],array); // true为深拷贝,false为浅拷贝
  1. 利用lodash函数库实现深拷贝 _.cloneDeep
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript深浅拷贝的实现和区别 的相关文章

  • 在 Web 浏览器中查找触发 then 事件的 jQuery 代码

    我加入了一个团队来从事一个项目 现在他们使用 jQuery 并且很多 javascript 文件都是外部文件而不是嵌入的 当我点击一个按钮时 它看起来就像 a class button cancel Cancel a 它触发一个在一个 ja
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • ant-d upload中如何为removeFile添加PopConfirm一个图片文件

    我正在使用 Ant d Upload 通过本地系统上传文件 然后单击文件预览图像上的删除图标 图像文件将被删除 我想添加一个弹出确认 所以我尝试在 onRemovefunction 中添加确认作为承诺但它不起作用 它在浏览器中显示警报 on
  • 为什么 jQuery 点击事件会多次触发

    我这里有这个示例代码http jsfiddle net DBBUL 10 http jsfiddle net DBBUL 10 document ready function creategene click function confir
  • 将 jquery-mobile 与 Webpack 结合使用

    我正在尝试使用 webpack 加载 jquery mobile 但到目前为止还没有运气 我知道 jquery mobile 依赖于 jquery ui 而 jquery ui 又依赖于 jquery 如何在 Webpack 中设置这样的场
  • 将 Sweet Alert 弹出窗口添加到 React 组件中的按钮

    我为 Bootstrap 和 React 找到了这个完美的 Sweet Alert 模块 我在 Meteor 应用程序中使用它 http djorg83 github io react bootstrap sweetalert http d
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 如何在 d3 js 中突出显示从根到选定节点的路径?

    我使用 d3 js 创建了一棵树 现在我创建了一个下拉菜单 其中包含树中所有节点的列表 现在 从下拉菜单中选择一个节点时 我想突出显示从根到该特定节点的路径 这个怎么做 首先创建一个 flatten 函数 它将分层数据变成一个 n 数组 f
  • AJAX:检查字符串是否为 JSON?

    我的 JavaScript 有时会在这一行崩溃 var json eval this responseText 当争论时会导致崩溃eval 不是 JSON 在进行此调用之前有什么方法可以检查字符串是否为 JSON 我不想使用框架 有什么方法
  • KeyboardEvent.keyCode 已弃用。这在实践中意味着什么?

    根据 MDN 我们绝对应该not正在使用 keyCode财产 它已被弃用 https developer mozilla org en US docs Web API KeyboardEvent keyCode https develope
  • 用数组反向查找对象

    假设我有一个这样的对象 resourceMap a 0 1 2 3 4 5 6 7 8 9 10 b 11 12 c 21 23 d 54 55 56 57 510 确定是否的最佳方法是什么resourceId 21将会 c 我们不知道钥匙
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • 如何在网页上实现文件上传进度条?

    当用户将文件上传到我的网络应用程序时 我想显示比动画 gif 更有意义的内容 我还有哪些可能性 编辑 我正在使用 Net 但我不介意是否有人向我展示与平台无关的版本 如果您对这一切在客户端通常如何工作感兴趣 就是这样 所有解决方案都通过 J
  • 如何在 e2e AngularJS 测试中进行文件上传?

    在我的一种观点中 我有一个文件上传控件 它支持通过拖放或单击按钮后打开的标准文件对话框上传文件 How to do this in my e2e tests1 1 Just one of the two options will be en
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • 我可以使用 jQuery 动态创建文件(及其内容)吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这是我的 HTML 代码 ul li

随机推荐

  • React路由提供常用组件的详解

    路由提供组件的详解 组件及其作用 xff1a 组件作用路由模式BrowserRouter约定模式 为 history xff0c 使用 HTML5 提供的 history API 来保持 UI 和 URL 的同步路由模式HashRouter
  • 使用Microsoft Visual Studio 2013 自带nmake工具出现NMAKE : fatal error U1077错误

    最近在研究Git上一个打开串口的项目 xff0c 名叫jSerialComm xff0c 地址https github com Fazecast jSerialComm 根据项目README md的指导 xff0c 进行到build阶段遇到
  • 前端将json数据和动态数组数据转换为Excel文件下载

    https blog csdn net friend ship article details 100582537
  • github在项目中使用的过程,包括账号的创建,密钥的查看

    项目中使用github的过程 xff0c 包括账号的创建 xff0c 密钥的查看 官网 xff1a https github com 1 注册账号和密码 2 创建好了之后 xff0c 新建一个仓库 3 填写仓库名称及说明 xff0c 创建仓
  • vscode中使用git,超级无敌简单

    vscode中使用git xff0c 超级无敌简单 一 复制远端地址 https gitee com zhaojia77 react foot git 二 打开vscode 1 点击源代码管理 2 点击克隆存储库 3 输入框里粘贴上你的远端
  • mongodb的安装及使用,增删改查的基本命令

    mongodb的安装及使用 xff0c 增删改查的基本命令 1 先安装MongoDB 2 在安装可视化工具 Robo 3T 1 3 1 3 找到安装MongoDB目录 xff0c 进入bin目录打开命令行 4 先在f盘创建一个data文件夹
  • Vue的官方指令

    Vue的官方指令 插值表达式 xff08 xff09 内容指令 xff08 v text和v html xff09 相同点 xff1a 都是可以让html标签里的内容变成动态的 不同点 xff1a v text和 相当于innerText不
  • 阿里OSS上传文件的两种方式的详解

    阿里OSS上传文件 一 为什么要使用云存储 xff1f 1 存储费用低 xff0c 不占用服务器的磁盘空间 2 流量费用低 xff0c 上传或下载不占用服务器带宽 二 怎么使用云存储 xff1f 方法一 xff1a javascript客户
  • antd设置表单的某个字段的值

    antd设置表单的某个字段的值 1 创建form的实例 const span class token punctuation span formObj span class token punctuation span span class
  • 数组去重,并且数组的每一项是对象object

    span class token keyword function span obj2key span class token punctuation span obj keys span class token punctuation s
  • javascript函数声明和函数表达式的区别

    一 首先它们写法不一样 xff0c 我们先写一个函数声明 函数表达式的dome span class token comment 1 函数声明 span span class token keyword let span ceshi1 sp
  • antd表单回显

    一 利用initialValue 适用于初始化固定的值 Form 的 initialValues 与 Item 的 initialValue 区别 xff1f 在大部分场景下 xff0c 我们总是推荐优先使用 Form 的 initialV
  • Netty远程桌面demo

    https github com leisuredong RemoteDesktop 从远端服务器获取屏幕截图展示在本地客户端窗口 xff0c 可以在服务端通过鼠标键盘控制远端机器
  • javascript:数据结构——栈

    栈结构的概念 是一种 后进先出 的数据结构 栈作用 在编程语的编译器和内存中保存变量 方法调用 栈操作 栈结构操作的方法 push xff1a 进栈 pop xff1a 出栈 peek xff1a 检查栈顶元素 isEmpty xff1a
  • javascript:数据结构——队列

    什么是对列 是一种 先进先出 的数据结构 xff08 如排队候车 xff0c 肯定是先排队的人先上车 xff09 实际用处 如打印机 队列操作 使用数组实现队列结构 使用类封装队列操作 span class token keyword co
  • javascript:数据结构——链表

    什么是链表 xff1f 链表是有序的列表 xff0c 链表是以节点的方式来存储 xff0c 是链式存储 每个节点包含item域 xff0c next指针 xff08 指向下一个节点 xff09 xff0c 即就是链表中的每一个元素都带有下一
  • JavaScript中的事件循环机制

    我们知道JavaScript语言是单线程的 xff0c 至于为啥是单线程 xff1f 假设有两个线程 xff0c 一个在页面上新增一个div xff0c 另一个线程在页面上删除div xff0c 那最终听谁的 xff1f 那JavaScri
  • 彻底搞懂递归

    什么是递归 xff1f 简单的来说 xff1a 递归就是函数自己调自己 下来我们来看几个例子让你彻底搞懂递归 一 计算n的阶乘 顾名思义阶乘就是所有小于及等于该数的正整数的积 xff08 0和1的阶乘是1 xff09 下面我们先用循环的方式
  • javascript:求最大公约数的几种方式

    什么是最大公约数 xff1f 几个数所共有的约数中最大的一个 即可以整除这几个数的最大的数 叫做这几个数的最大公约数 方法一 xff1a 计算机思维 span class token keyword function span span c
  • javascript深浅拷贝的实现和区别

    什么是深拷贝和浅拷贝 所谓拷贝就是赋值 xff0c 把a的值赋值给b 区别 最明显的区别就是 xff1a 把a的值赋值给b xff0c 然后你改变b xff0c 看a会不会有变化 xff0c 如果a变了那就是浅拷贝 xff0c 如果a没有变