当前位置: 首页 > news >正文

经典面试题之赋值和深浅拷贝的区别

1.区别

**赋值:**基本数据直接拷贝,互不影响,引用数据把地址赋值给新对象,新旧对象指向同一个地址。
**浅拷贝: **基本类型之间互不影响,对象只会复制对象的第一层基本数据和引用类型的地址,对象内部嵌套的引用类型会共享内存地址。所以,浅拷贝对象的第一层数据是互相不影响的,但是内部嵌套的引用类型会共享内存地址
**深拷贝: **基本数据和对象都互不影响。改变新对象不会影响旧对象,新旧对象互不影响。

2.详解

1-赋值

赋值操作(简称赋值):赋值操作符 **= **右边的表达式会先被求值,然后将结果赋给左边的变量或属性。
基本数据直接拷贝,互不影响,引用数据把地址赋值给新对象,新旧对象指向同一个地址。

// 赋值给变量
let a = 1;
let b = a;
a = 2;
b = 3;
console.log(a, b); // 2 3 ->基本数据互不影响// 赋值对象
const obj = { a: 1 };
const obj1 = obj;
obj.b = 0;
obj1.b = 1;
console.log(obj.b, obj1.b); // 对象把地址赋值给新对象,新旧对象指向同一个地址

2-浅拷贝

拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址
浅拷贝方法

  • concat()
  • slice()
  • 扩展运算符
const obj1 = {name: "zbt",age: 18,dog: {name: "旺财",age: 3}
}
// Object.assign()方法
const objAssign = Object.assign({}, obj1);
objAssign.dog.name = "assign";
obj1.name = "法外狂徒";
objAssign.name = "张三";
console.log(obj1.name, objAssign.name); // 法外狂徒 张三 基本数据类型精确拷贝,互不影响
console.log(obj1.dog.name, objAssign.dog.name);  //assign assign 内存引用数据拷贝的是内存地址,数据共享,互相影响。// 扩展运算符方法
const objExtend = { ...obj1 }
objExtend.dog.name = "extend";
obj1.name = "出道两年半";
objExtend.name = "哥哥";
console.log(obj1.name, objExtend.name); // 出道两年半 哥哥 基本数据类型互不影响
console.log(obj1.dog.name, objExtend.dog.name); // extend extend 同理

3-深拷贝

深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象, 故新旧数据互不影响。

// 1.直接stringify + parse
const a = {};
const b = JSON.parse(JSON.stringify(a));// 2.直接使用回调函数。
//使用递归的方式实现数组、对象的深拷贝
function deepClone(obj) {//判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝var objClone = Array.isArray(obj) ? [] : {};//进行深拷贝的不能为空,并且是对象或数组if (obj && typeof obj === "object") {for (key in obj) {if (obj.hasOwnProperty(key)) { // 过滤掉原型链上继承的对象属性,for in 不能遍历出非可枚举属性if (obj[key] && typeof obj[key] === "object") { // obj[key]->用来判断null,undefinedobjClone[key] = deepClone(obj[key]);} else {objClone[key] = obj[key];}}}}return objClone;
}
let obj1 = { name: '张三', action: { say: 'hi'},'': undefined }
obj1[Symbol(66)] = 999;
console.log(obj1);
let newObj = deepClone(obj1)console.log(newObj);

3-扩展

stringify深拷贝和循环回调深拷贝的对比。

对象在stringify在拷贝过程中,以下几种情况需要注意:

  1. 对象中有undefined类型或function类型的数据时 — undefined和function会直接丢失
  2. 对象中有NaN、Infinity和-Infinity这三种值的时候 — 会变成null。
  3. 对象允许嵌套任意深度,但是不能构成引用循环,否则stringify会抛出错误。
const obj = {name:"我是一个外部对象"
}
const oldObj = {name:"BUG海",notDefined:undefined,foo(){console.log("我会被stringfy哥哥丢掉嘛"); //真会丢},one:NaN,two:Infinity,three:-Infinity,
};
// oldObj.objInterior = oldObj; //加上这个引用循环stringify,真的会抛出错误
const newObj = JSON.parse(JSON.stringify(oldObj));
console.log("🚀 ~ file: test.js:12 ~ newObj:", newObj)   

所以推荐使用递归的方式进行深拷贝或者第三方工具库的方式 immutale,Lodash ,fast-copy等

相关文章:

经典面试题之赋值和深浅拷贝的区别

1.区别 **赋值:**基本数据直接拷贝,互不影响,引用数据把地址赋值给新对象,新旧对象指向同一个地址。 **浅拷贝: **基本类型之间互不影响,对象只会复制对象的第一层基本数据和引用类型的地址,对象内部嵌套的…...

电子取证的电脑配置有关问题,以我仅有的知识为大家建议一下。

电子取证火力很重要,用轻薄本是没法取证的,所以至少是全能本或者是游戏本,牛逼的选手上台式,参考浙警许专家,yyds我专家! 我从实战出发,参考历年“美亚杯”和“长安杯”比赛,给大家…...

【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)

文章目录前言环形链表环形链表 II写在最后前言 本章的OJ练习相对于OJ练习(4)较为简单。不过&#xff0c;本章的OJ最重要的是要我们证明为何可以这么做。这也是面试中常出现的。 对于OJ练习(4)&#xff1a;-> 传送门 <-&#xff0c;分割链表以一种类似于归并的思想解得&a…...

MySQL 基础教程[13]

MySQL 基础教程[13]问题1问题1代码问题2问题2代码本系列MySQL 基础教程通过“问题-代码”的方式介绍各类方法&#xff0c;每篇设置2个MySQL综合问题&#xff0c;并给出解决方案。 问题1 kwgl数据库中有学生基本信息表student和系别表dept。表结构及说明如下: student (sid, s…...

个人练习-Leetcode-826. Most Profit Assigning Work

题目链接&#xff1a;https://leetcode.cn/problems/most-profit-assigning-work/ 题目大意&#xff1a;给出一串任务&#xff0c;difficulty表示任务难度&#xff0c;profit表示任务的收益&#xff08;以下简称diff和pro&#xff09;。给出一串工人的能力worker。每个工人只能…...

云原生周刊:边缘计算会吞噬云吗?| 2023.3.13

文章推荐 边缘计算吞噬云&#xff1f; 这篇文章讨论了边缘计算对传统云计算的潜在冲击。 边缘计算是一种新型的计算架构&#xff0c;它将计算移动到离数据源和终端设备更近的地方&#xff0c;从而提供更快的响应时间和更好的用户体验。相比之下&#xff0c;云计算是一种集中…...

python+django+vue图书个性化推荐系统

整个系统是由多个功能模块组合而成的&#xff0c;要将所有的功能模块都一一列举出来&#xff0c;然后进行逐个的功能设计&#xff0c;使得每一个模块都有相对应的功能设计&#xff0c;然后进行系统整体的设计。 本图书个性化推荐系统结构图如图python manage.py runserver 开…...

经典文献阅读之--LIO-PPF(增量平面预拟合LIO)

0. 简介 自从ikd-tree出来后&#xff0c;现在越来越多的工作瞄准了增量式这种方法&#xff0c;比如说激光惯导里程计&#xff08;LIDAR-Inertial Odometry&#xff0c;LIO&#xff09;的高精度跟踪通常涉及最小化点到平面距离的k最近邻&#xff08;kNN&#xff09;搜索&#x…...

ChatGPT背后有哪些关键技术?CSIG企业行带你一探究竟

目录1 ChatGPT的时代2 CSIG企业行3 议题&嘉宾介绍3.1 对生成式人工智能的思考3.2 对话式大型语言模型研究3.3 文档图像处理中的底层视觉技术4 观看入口1 ChatGPT的时代 2015年&#xff0c;马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始…...

C#基础之面向对象编程(二)

总目录 文章目录总目录前言一、概述1. 定义2. 面向对象的三大特性二、封装1. 定义2. 属性三、继承1. 定义2. 继承的使用3. base 和this四、多态1. 定义2. 重写和重载3. 多态性的实现1、静态多态性2、动态多态性4. 向上转型和向下转型1、定义2、语法格式3、案例结语前言 本文主…...

蓝桥杯刷题冲刺 | 倒计时25天

作者&#xff1a;指针不指南吗 专栏&#xff1a;蓝桥杯倒计时冲刺 &#x1f43e;马上就要蓝桥杯了&#xff0c;最后的这几天尤为重要&#xff0c;不可懈怠哦&#x1f43e; 文章目录1.完全二叉树1.完全二叉树 题目 链接&#xff1a; 完全二叉树的权值 - 蓝桥云课 (lanqiao.cn) 给…...

c语言—动态内存管理

一.为什么存在动态内存开辟开辟空间的特点&#xff1a;空间开辟大小是固定的数组在申明时&#xff0c;必须指定数组长度&#xff0c;她所需要的内存在编译时分配但是对于空间的需求&#xff0c;不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道&#xff…...

请说明Ajax、Fetch、Axios三者的区别

相同点&#xff1a; 1、三者都用于网络请求&#xff0c;但是不同维度 2、 Ajax(Asynchronous Javascript and XML)&#xff0c;一种技术的统称&#xff0c;并不是实际的API 3、Fetch是一个具体的API&#xff0c;浏览器里面直接有一个API就叫Fetch 4、 Axios是一个第三方库&…...

阿里p8测试总监,让我们用这份《测试用例规范》,再也没加班过

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 固然&#xff0c;编写一份好的测试用例需要&#xff1a;充分的需求分析能力 理论及经验加持&#xff0c;作为测试职场摸爬打滚的老人&…...

【Unity】数据持久化路径Application.persistentDataPath

今天突然想到这个路径Application.persistentDataPath&#xff0c;热更的重要路径&#xff0c;该文件夹可读可写&#xff0c;在移动端唯一一个可读写操作的文件夹。移动端可以将本地的资源&#xff08;资源MD5值配置表&#xff09;等一些文件放到StreamingAssets文件夹下&#…...

华为OD机试 - 插队(Java JS Python)

题目描述 某银行将客户分为了若干个优先级, 1 级最高, 5 级最低,当你需要在银行办理业务时,优先级高的人随时可以插队到优先级低的人的前面。 现在给出一个人员到来和银行办理业务的时间序列,请你在每次银行办理业务时输出客户的编号。 如果同时有多位优先级相同且最高…...

MongoDB数据库从入门到精通系列之八:调整oplog大小

MongoDB数据库从入门到精通系列之八:调整oplog大小 一、oplog的概念二、oplog大小三、调整oplog大小详细步骤一、oplog的概念 操作日志oplog包含了主节点执行的每一次写操作。oplog是存在于主节点local数据库中的一个固定集合。从节点通过查询此集合以获取需要复制的操作。每个…...

PCL 间接平差法拟合二维直线

目录 一、算法原理二、代码实现三、结果展示四、相关链接一、算法原理 通过传统最小二乘法对点云数据进行二维直线拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 y y y轴方向上,设点云拟合的二维直线方程为: y =...

进程调度的基本过程

这里写目录标题什么是进程进程管理结构体或类的主要属性pid内存指针文件描述符表辅助进程调度的属性并发并行并发什么是进程 进程是操作系统对一个正在运行的程序的一种抽象&#xff0c;也就是说&#xff0c;一个运行起来的程序就是一个进程。 进程又是操作系统进行资源分配的…...

python自动化办公(二)

上接python自动化办公&#xff08;一&#xff09; 文章目录文件和目录操作使用shutil库文件查找globfnmatchhashlib文件和目录操作 使用shutil库 shutil库也是Python标准库&#xff0c;它可以处理文件、文件夹、压缩包&#xff0c;能实现文件复制、移动、压缩、解压缩等功能。…...

Mac开发者必备:OpenClaw调试QwQ-32B代码补全全流程

Mac开发者必备&#xff1a;OpenClaw调试QwQ-32B代码补全全流程 1. 为什么选择OpenClaw作为代码助手 作为一名长期在Mac上开发的全栈工程师&#xff0c;我一直在寻找能够真正融入工作流的智能编码工具。直到遇到OpenClaw&#xff0c;才发现这个开源的本地化AI智能体框架完美契…...

GPT-5-Codex CLI实战:如何用UIUIApi中转服务稳定获取API Key(避坑指南)

GPT-5-Codex CLI高效实践&#xff1a;国内开发者API接入全流程解析 最近在技术社区里&#xff0c;关于GPT-5-Codex的讨论热度持续攀升。作为一名长期关注AI编程工具的开发者&#xff0c;我发现很多同行在尝试接入这项服务时遇到了各种技术障碍。本文将分享一套经过实战验证的完…...

这次终于选对了!盘点2026年圈粉无数的AI论文网站

一天写完毕业论文在2026年已不再是天方夜谭。这是2026年最炸裂、实测能大幅提速的AI论文网站&#xff0c;覆盖选题、写作、查重、排版全流程&#xff0c;真正帮你高效搞定论文。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首选&#xff09; 这类工具…...

GPStar Audio串口控制库:嵌入式多轨音频系统开发指南

1. GPStar Audio Serial Library 技术深度解析GPStar Audio Serial Library 是专为 GPStar Technologies 公司推出的 GPStar Audio 与 GPStar Audio XL 系列嵌入式音频播放器设计的串行通信控制库。该库并非通用音频驱动&#xff0c;而是针对特定硬件平台深度定制的、面向实时交…...

MediaPipe Holistic实战效果:一张照片生成全身骨骼图,效果超乎想象

MediaPipe Holistic实战效果&#xff1a;一张照片生成全身骨骼图&#xff0c;效果超乎想象 1. 引言&#xff1a;当AI遇见全身感知 想象一下&#xff0c;你只需要上传一张普通的全身照片&#xff0c;AI就能自动识别出你的面部表情、手势动作和身体姿态&#xff0c;并生成一张精…...

Framer.js测试策略终极指南:构建可靠UI原型的完整测试方案

Framer.js测试策略终极指南&#xff1a;构建可靠UI原型的完整测试方案 【免费下载链接】Framer Framer - Design Everything 项目地址: https://gitcode.com/gh_mirrors/fr/Framer Framer是一款强大的UI设计和原型工具&#xff0c;能够帮助设计师和开发者快速创建交互丰…...

SEO_2024年最新SEO趋势与核心优化方法介绍

<h1 id"seo2024seo">SEO:2024年最新SEO趋势与核心优化方法介绍</h1> <p>在互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;仍然是网站流量和品牌推广的关键。2024年&#xff0c;SEO领域有许多新的趋势和核心优化方法&#xff0c;帮…...

日语零基础每天学习笔记【01-10】

第一天 日语五十音&#xff1a;平假名/片假名发音あア いイ うウ えエ おオaかカ きキ くク けケ こコkaさサ しシ すス せセ そソsaたタ ちチ つツ てテ とトtaなナ にニ ぬヌ ねネ のノnaはハ ひヒ ふフ へヘ ほホhaまマ みミ むム めメ もモmaや…...

项目介绍 MATLAB实现基于灰狼优化算法(GWO)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码)

MATLAB实现基于灰狼优化算法&#xff08;GWO&#xff09;进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问以下链接地址 MATLAB实现基于灰狼优化算法&#xff08;GWO&#xff09;进行无人机三维路径规划的详细项目实例-CSDN博客 https://blo…...

别再自己造轮子了!用Python HAPI一键搞定HITRAN/HITEMP光谱计算(附避坑指南)

别再重复造轮子&#xff01;用Python HAPI高效处理HITRAN/HITEMP光谱数据 在光谱分析领域&#xff0c;许多研究者都曾陷入过这样的困境&#xff1a;为了计算某种气体的光谱特性&#xff0c;花费数周甚至数月时间研读文献、编写算法&#xff0c;结果却发现计算效率低下且结果难以…...