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

news/2024/7/7 20:42:30 标签: javascript, 前端, 开发语言

它们都是用来复制的

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

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

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

用扩展运算符实现深拷贝

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

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

JSON.parse( JSON.stringify( obj3 ) )

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

javascript">/* 用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>

递归实现深拷贝

javascript">/* 写递归实现深拷贝 */
<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.niftyadmin.cn/n/5535186.html

相关文章

深入浅出:npm常用命令详解与实战

theme: smartblue npm是什么 npm&#xff08;Node Package Manager&#xff09;是Node.js平台的默认包管理器&#xff0c;它让JavaScript开发者能够轻松地共享、管理和使用彼此编写的代码模块。npm不仅仅是一个安装工具&#xff0c;它还是一个全面的生态系统&#xff0c;用于发…

k8s_如何配置 containerd 使用镜像加速拉取docker.io上的镜像

在 Kubernetes 使用 containerd 作为容器运行时,可以通过配置 containerd 来使用镜像网站(镜像仓库)拉取镜像。这可以通过修改 containerd 的配置文件来实现。以下是详细步骤: 步骤 1:安装 containerd (如果已安装,这一步略过) 如果尚未安装 containerd,可以使用以下命…

阿里云centos7.9 挂载数据盘到 www目录

一、让系统显示中文 参考&#xff1a;centos7 怎么让命令行显示中文&#xff08;英文-&#xff1e;中文&#xff09;_如何在命令行中显示中文-CSDN博客 1、输入命令&#xff1a;locale -a |grep "zh_CN" 可以看到已经存在了中文包 2、输入命令&#xff1a;sudo vi…

树状数组基础知识

lowbit: lowbit(x)x&(-x) 树状数组&#xff1a; 树状数组的功能&#xff1a; 数组 在O(1)的时间复杂度实现单点加&#xff1a; 在O(lng n)的时间复杂度实现查询前缀和&#xff1a; 树状数组的定义&#xff1a; 查询前x项的和操作&#xff1a; ll query(int x){ll s0;f…

Lumion专业3D渲染三维场景设计软件下载,Lumion强大的三维渲染软件

Lumion&#xff0c;这款软件具备令人瞩目的渲染速度&#xff0c;能够以闪电般的速度生成令人叹为观止的图像、视频和360全景图&#xff0c;让设计师们能够在短时间内将创意转化为视觉盛宴。 Lumion软件内置了一系列可定制的预先配置的HDR天空环境&#xff0c;这些天空环境不仅丰…

【人工智能学习之图像操作(一)】

【人工智能学习之图像操作&#xff08;一&#xff09;】 图像读写创建图片并保存视频读取色彩空间与转换色彩空间的转换通道分离理解HSV基本图形绘制 阀值操作OTSU二值化简单阀值自适应阀值 图像读写 图像的读取、显示与保存 import cv2 img cv2.imread(r"1.jpg")…

云桌面运维工程师

一 深信服驻场工程师 1 深信服AC、AF、AD、NGAF、WOC Atrust、WAF项目实施经验者优先考虑。 负责云桌面POC测试 部署和配置&#xff1a;设置云桌面基础设施&#xff0c;包括虚拟化平台、云桌面管理软件和相关组件。确保正确配置网络、存储和安全设置。 用户体验&#xff1…

VSCode 自动调整格式失效了 ESLint

ESLint【最新注意2.4.4版本有问题&#xff0c;需退回2.4.2版本就恢复正常了】 参考&#xff1a;vscode自动格式化失效_vscode保存自动格式化失效-CSDN博客