JS面试题6——深拷贝和浅拷贝

它们都是用来复制的

1. 浅拷贝(只复制引用,而未复制真正的值)

/* 简单赋值 */
var arr1 = ['a', 'b', 'c', 'd'];
var arr2 = arr1;
/* Object.assign实现的也是浅拷贝 */
var obj1 = {a:1, b:2}
var obj2 = Object.assign(obj1);

2. 深拷贝(是复制真正的值),会在堆内存中开辟新的空间

用扩展运算符实现深拷贝

缺点:这个方法只能实现第一层,当有多层的时候还是浅拷贝

/* 用扩展运算符实现深拷贝 */
var obj1 = {name: 'xxy',age: '18'
}
var obj2 = {...obj}
obj1.name = 'xy'
console.log( obj1 );
console.log( obj2 );

JSON.parse( JSON.stringify( obj3 ) )

缺点:该方法并不会拷贝内部函数

/* 用JSON.parse(JSON.stringify( obj3 ))实现深拷贝 */
<script>
var obj3 = {a: 1,b: 2,say(){console.log( 'say hello' )}
}
var obj4 = JSON.parse(JSON.stringify( obj3 ));
obj3.a = '100';
obj4.b = '咕噜咕噜';
console.log( obj3, obj4);
</script>

递归实现深拷贝

/* 写递归实现深拷贝 */
<script>
var obj2 = {a: 1,b: 2,arr: ['a','b','c','d']
}
function copyObj( obj ){if(Array.isArray(obj)){var newObj = []}else{var newObj = {};}for ( var key in obj){if( typeof obj[key] == 'object'){newObj[key] = copyObj(obj[key])}else{newObj[key] = obj[key];}}return newObj; // 此时的newObj跟前面的obj2就肯定不是同一个引用了
}
console.log( copyObj(obj2) )
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 预处理器定义

目录 一、什么是预处理器定义 二、常见用法 1. 条件编译 2. 宏定义 3. 防止重复包含 4. 动态链接库的导入导出 5、如何设置预处理器定义 一、什么是预处理器定义 预处理器定义&#xff08;Preprocessor Definitions&#xff09;在C和C编程中用于在编译过程中进行文本替换…

华为OCR识别技术 [C#]

了解华为OCR识别技术 光学字符识别&#xff08;OCR&#xff0c;Optical Character Recognition&#xff09;是一种将印刷或手写的文本字符转换为机器可读文本的技术。华为的OCR技术在业界以其高精度和高效率而著称&#xff0c;广泛应用于金融、教育、政府等多个领域。 OCR技术…

hive explain分析Hsql详解

Hive explain HIVE提供了EXPLAIN命令来展示一个查询的执行计划&#xff0c;可以帮助我们查看stage的依赖情况、排查数据倾斜、hive 调优等 使用语法如下&#xff1a; EXPLAIN [EXTENDED|CBO|AST|DEPENDENCY|AUTHORIZATION|LOCKS|VECTORIZATION|ANALYZE] query explain 后面可以…

【postgresql】版本学习

PostgreSQL 17 Beta 2 发布于2024-06-27。 PostgreSQL 17 Beta 2功能和变更功能的完整列表&#xff1a;PostgreSQL: Documentation: 17: E.1. Release 17 ​ 支持的版本&#xff1a; 16 ( 当前版本) / 15 / 14 / 13 / 12 ​ 不支持的版本&#xff1a; 11 / 10 / 9.6 / 9.5 /…

Symfony框架实战入门:打造简易博客应用全过程解析

Symfony框架详解 一、引言 随着Web应用的复杂度不断提升&#xff0c;开发者们越来越需要高效、可扩展和易于维护的框架来支持他们的工作。Symfony就是这样一款优秀的PHP框架&#xff0c;它基于MVC&#xff08;模型-视图-控制器&#xff09;设计模式&#xff0c;提供了许多强大…

探索工业AI智能摄像机的高端科技

在当今快速发展的工业智能化领域&#xff0c;工业AI智能摄像机系列以其卓越的性能和多功能性在国内外备受关注&#xff08;文末有国外工程师的评测链接&#xff09;。搭载Raspberry Pi CM4支持的旨在广泛应用&#xff0c;涵盖从简单的条形码扫描到基于人工智能的工业环境中的缺…

7.1.SQL注入-基于函数报错的方式来利用updatexml()

基于函数报错的方式来进行利用-字符型&#xff08;本页updatexml()&#xff09; 前提条件是后台数据库没有屏蔽数据库语法报错信息 updatexml()方法详解 注释&#xff1a; 第一个参数&#xff0c;意思就是xml文档的名称 第二个参数&#xff0c;意思就是定位到xml文档中指定…

OFDM关键技术——ICI消除技术

ICI消除算法可以分为以下几类&#xff1a; 1、OFDM符号长度和载波间隔的最优选择&#xff0c;较短的符号周期更有利于降低ICI 2、OFDM基信号的最佳选择&#xff0c;选择频域衰减更快的OFDM基带脉冲 3、自干扰消除技术&#xff0c;将信息调制到一组子载波上 4、频域均衡器&a…

认识100种电路之耦合电路

在电子电路的世界中&#xff0c;耦合电路宛如一座精巧的桥梁&#xff0c;连接着各个功能模块&#xff0c;发挥着至关重要的作用。 【为什么电路需要耦合】 在复杂的电子系统中&#xff0c;不同的电路模块往往需要协同工作&#xff0c;以实现特定的功能。然而&#xff0c;这些模…

网络爬虫(二) 哔哩哔哩热榜高频词按照图片形状排列

我们有时候需要爬取结果生成为自定义的词云图 生成自定义的词云图通常需要以下步骤&#xff1a; 1. 爬取数据&#xff1a;使用爬虫工具或库&#xff0c;如requests、BeautifulSoup等&#xff0c;可以爬取网页、论坛、社交媒体等平台上的文本数据。 2. 数据预处理&#xff1a…

uniapp微信小程序电子签名

先上效果图&#xff0c;不满意可以直接关闭这页签 新建成单独的组件&#xff0c;然后具体功能引入&#xff0c;具体功能点击签名按钮&#xff0c;把当前功能页面用样式隐藏掉&#xff0c;v-show和v-if也行&#xff0c;然后再把这个组件显示出来。 【签名-撤销】原理是之前绘画时…

AI影像测量:开启测量仪器的智能之眼

在基于机器视觉的影像测量中&#xff0c;一些复杂特征传统测量需要人工手动选点测量&#xff0c;不仅易受到人为因素的干扰&#xff0c;而且极大的降低测量效率&#xff0c;提高了人力成本和生产成本。AI影像测量技术运用先进的机器视觉和深度学习算法&#xff0c;可快速、准确…

【JVM】JVM 内存结构

程序计数器 Cpu 要不停的切换执行线程&#xff0c;所以在切换回同一个线程的时候要知道程序执行到哪了&#xff0c;程序计数器&#xff08;PC 计数器&#xff09;&#xff0c;用来存储指向下一条指令的地址&#xff0c;也就是将要执行的代码。 程序的分支、循环、跳转、异常处…

解决for循环效率慢的关键在于向量化

在探讨如何通过使用向量化来提升for循环的效率之前&#xff0c;我们需要先理解为什么传统的for循环在某些情况下会成为性能瓶颈&#xff0c;并深入剖析向量化的基本原理和优势。随后&#xff0c;我们将详细阐述向量化如何在实际编程中应用&#xff0c;并对比向量化前后的性能差…

QuickBooks 2024 for Mac:财务智慧,触手可及

QuickBooks 2024 for Mac是一款专为Mac用户设计的专业财务管理软件&#xff0c;它集成了多种实用功能&#xff0c;助力企业和个人用户高效管理财务事务。 &#x1f4ca; 全面的财务管理工具&#xff1a;QuickBooks 2024 for Mac 提供了一套全面的财务管理功能&#xff0c;包括…

用免费的可视化工具制作3D智慧城市大屏,融合数字孪生,引领数据升级

在如今数据驱动的时代&#xff0c;越来越多的场景中都有可视化大屏的身影&#xff0c;许多企业和政府部门也从常规的二维看板渐渐地转向更加炫酷&#xff0c;立体的3D可视化大屏。3D可视化大屏成为了展示复杂数据、实时监控业务动态的重要工具。本文将详细介绍如何使用免费的数…

爬虫 属性 方法

在Python中&#xff0c;爬虫常用于从网页上抓取数据。BeautifulSoup是一个流行的库&#xff0c;用于从HTML或XML文件中提取数据。它创建了一个解析树&#xff0c;方便你从文档中查找、修改或导航数据。 安装BeautifulSoup 首先&#xff0c;你需要安装BeautifulSoup和lxml&…

物联网工业级网关解决方案 工业4G路由器助力智慧生活

随着科技的飞速发展&#xff0c;无线通信技术正逐步改变我们的工作与生活。在这个智能互联的时代&#xff0c;一款高性能、稳定可靠的工业4G路由器成为了众多行业不可或缺的装备。工业4G路由器以其卓越的性能和多样化的功能&#xff0c;助力我们步入智慧新纪元。 一、快速转化&…

Python处理excel数据详解

1.导入文件 注意&#xff1a;要把excel放到跟你的python文件在同一个地方 import pandas as pd import numpy as np dfpd.read_excel("鸢尾花训练数据.xlsx",engine"openpyxl") import pandas 先引入 (若没有下载 需要在终端下载 pip install pandas)…

LAMP架构的源码编译环境下部署Discuz论坛

一、LAMP架构 LAMP架构是一种常见的用于构建动态网站的技术栈 组成功能Linux&#xff08;操作系统&#xff09;LAMP 架构的基础&#xff0c;用于托管 Web 服务器和应用程序Apache&#xff08;Web服务器&#xff09;接收和处理客户端请求&#xff0c;并将静态和动态内容发送给…