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

JavaScript进阶:js的一些学习笔记-4

文章目录

        • 1. 拷贝
          • 1. 浅拷贝
          • 2. 深拷贝
        • 2. 异常处理

1. 拷贝

这里指的拷贝是指拷贝引用类型的数据(对象)

1. 浅拷贝

拷贝对象:Object.assign() 或者 {…obj} 展开运算符

const obj = {name:'liuze',age:23
}
const o = {...obj};
o.age = 22;
console.log(o);
console.log(obj);
// {name: 'liuze', age: 22}
// {name: 'liuze', age: 23}

存在一个问题,如下:

const obj = {name:'liuze',age:23,obj2:{name:'hh'}
}
const o = {...obj};
o.obj2.name = 'liuze';
console.log(o);
console.log(obj);
// 都为
/*
{	age: 23name: "liuze"obj2: {name: 'liuze'}
}
*/

如果是简单数据类型拷贝值,引用数据类型拷贝的是地址(简单理解:如果是单层对象,没有问题,如果是多层就有问题)

直接赋值和浅拷贝的区别

  • 直接赋值的方法,只要是对象,都会相互影响,因为是直接拷贝对象栈里面的地址
  • 浅拷贝如果是一层对象,不相互影响,如果出现多层对象拷贝还会相互影响
2. 深拷贝

拷贝的是对象,不是地址

常见方法:

  1. 通过递归实现深拷贝

    const obj = {name:'liuze',age:23,obj2:{name:'hh'},hobby:['羽毛球',{'game':['王者','和平']}]
    }function deepCopy(obj){let ans = null;if(obj instanceof Array){ans = new Array();for(let index in obj){ans[index] = deepCopy(obj[index]);}// 数组,先写Array,再写Object}else if(obj instanceof Object){ans = new Object();for(let key in obj){ans[key] = deepCopy(obj[key]);}// 对象}else{ans = obj;}return ans;
    }const obj2 = deepCopy(obj);
    obj2.obj2.name = 'liuze';
    obj2.hobby[0] = '足球';
    obj2.hobby[1].game[0] = '王者荣耀';
    console.log(obj2);
    console.log(obj);
    

    请添加图片描述

    上述深拷贝代码有一定问题,只是拷贝数据没有问题,但是如果对象中有函数定义。。。,是有问题的

  2. lodash/cloneDeep

    lodash介绍文档在这:lodash,lodash.js下载链接为:lodash.js

    <!DOCTYPE html>
    <html>
    <head><title>javascript</title>
    </head>
    <body></body>
    <script type="text/javascript" src="lodash.js"></script>
    <script type="text/javascript">const obj = {name:'liuze',age:23,obj2:{name:'hh'},hobby:['羽毛球',{'game':['王者','和平']}]}const obj2 = _.cloneDeep(obj);obj2.hobby[0] = '足球';console.log(obj);console.log(obj2);</script>
    </script>
    </html>
    

    运行结果:
    在这里插入图片描述

  3. 通过JSON.stringify()实现

    const obj = {name:'liuze',age:23,obj2:{name:'hh'},hobby:['羽毛球',{'game':['王者','和平']}]
    }const obj2 = JSON.parse(JSON.stringify(obj));
    obj2.hobby[0] = '足球';
    console.log(obj);
    console.log(obj2);
    
2. 异常处理

异常处理是指预估代码执行过程中可能发生的错误,然后最大程度的避免错误的发生导致整个程序无法继续运行

  • throw抛异常

    1. throw抛出异常信息,程序也会终止执行
    2. throw后面跟的是错误提示信息
    3. Error对象配合throw使用,能够设置更详细的错误信息
    function sum(x,y){if(!x || !y){throw new Error('传入参数异常');}return x + y;
    }console.log(sum());
    

    在这里插入图片描述

  • try/catch/finally捕获异常

    <!DOCTYPE html>
    <html>
    <head><title>javascript</title>
    </head>
    <body><p>123</p>
    </body>
    <script type="text/javascript">function fn(){try{const p = document.querySelector('.p');p.style.color = 'red';}catch(err){console.log(err.message);return}finally{console.log('11');}}fn();
    </script>
    </script>
    </html>
    

    运行结果:
    在这里插入图片描述

    1. try。。。catch 用于捕获错误信息
    2. 将预估可能发生错误的代码卸载try代码段中
    3. 如果try代码段中出现错误后,会执行catch代码段,并截获错误信息
    4. finally不管是否有错误,都会执行
  • debugger

    用于调试的时候使用

    function fn(){debugger;console.log('哈哈');
    }fn();
    

相关文章:

JavaScript进阶:js的一些学习笔记-4

文章目录 1. 拷贝1. 浅拷贝2. 深拷贝 2. 异常处理 1. 拷贝 这里指的拷贝是指拷贝引用类型的数据(对象) 1. 浅拷贝 拷贝对象&#xff1a;Object.assign() 或者 {…obj} 展开运算符 const obj {name:liuze,age:23 } const o {...obj}; o.age 22; console.log(o); console.…...

【可能是全网最丝滑的LangChain教程】三、快速入门LLMChain

系列文章地址 【可能是全网最丝滑的LangChain教程】一、LangChain介绍 【可能是全网最丝滑的LangChain教程】二、LangChain安装 使用LangChain构建应用 LangChain支持构建应用程序&#xff0c;将外部数据源和计算源连接到LLM。我们将从一个简单的 LLM 链开始&#xff0c;它…...

Oracle Primavera Analytics 是什么,与P6的关系?

前言 Oracle Primavera P6 Analytics 是与P6有关的一个相对较新的模块&#xff0c;Primavera 用户社区在很大程度上尚未对其进行探索。 那么它到底有什么作用呢&#xff1f; 通过了解得知它旨在通过深入了解组织的项目组合绩效&#xff0c;帮助高级管理层对其项目组合做出更好…...

在 Amazon Bedrock 上使用 Anthropic Claude 系统 Prompt

系统 prompt 是定义生成式 AI 模型对用户输入的响应策略的一种好方法。这篇博文将介绍什么是系统 prompt&#xff0c;以及如何在基于 Anthropic Claude 2.x 和 3 的应用中使用系统 prompt。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例…...

【LeetCode】动态规划--题目练习

有关动态规划算法的整理&#xff1a;添加链接描述 1.爬楼梯 爬楼梯:LeetCode70 int climbStairs(int n) {//1.确定dp数组和意义 dp[n]表示第n阶的方法//2.确定递推关系式 dp[n] dp[n-1]dp[n-2];//3.初始化int dp[50] {0};dp[1] 1;dp[2] 2;for(int i 3;i<n;i){dp[i] …...

【LeetCode热题100】101. 对称二叉树(二叉树)

一.题目要求 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 二.题目难度 简单 三.输入样例 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&a…...

VLC抓取m3u8视频

前言 最近想看一些网络视频&#xff0c;但是很多时候网页上是m3u8推流的&#xff0c;如果在线看&#xff0c;速度又慢&#xff0c;所以就想下载下来&#xff0c;就想到了VLC的推流&#xff0c;转换能力&#xff0c;查阅资料&#xff0c;加上实践&#xff0c;总结心得。 设置中…...

聊聊Python都能做些什么

文章目录 一、Python简介二、Python都能做些什么1. Web开发2. 数据分析和人工智能3. 自动化运维和测试4. 网络爬虫5. 金融科技 三、Python开源库都有哪些1. Web开发2. 数据分析和科学计算3. 机器学习和深度学习4. 网络爬虫5. 自动化和测试6. 其他常用库 四、相关链接 一、Pytho…...

JavaWeb06-MVC和三层架构

目录 一、MVC模式 1.概述 2.好处 二、三层架构 1.概述 三、MVC与三层架构 四、练习 一、MVC模式 1.概述 MVC是一种分层开发的模式&#xff0c;其中 M&#xff1a;Model&#xff0c;业务模型&#xff0c;处理业务 V&#xff1a; View&#xff0c;视图&#xff0c;界面展…...

MySQL数据库实现增删改查基础操作

准备工作 安装mysql8.0 (安装时一定要记住用户名和密码)安装数据库可视化视图工具Navicat 请注意⚠️⚠️⚠️⚠️ a. 编程类所有软件不要安装在中文目录下 b. Navicat破解版下载安装教程&#xff1a;&#xff08;由于文章审核提示版权问题&#xff0c;链接不方便给出&#xff…...

PCM和I2S区别

I2S和PCM接口都是数字音频接口&#xff0c;而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口&#xff0c;是不是两个接口有各自不同的应用呢&#xff1f;先来看下概念。 PCM&#xff08;PCM-clock、PCM-sync、PCM-in、PCM-out&#xff09;脉冲编码调制&#xff0c;模拟语音信…...

大模型笔记:吴恩达 ChatGPT Prompt Engineering for Developers(1) prompt的基本原则和策略

1 intro 基础大模型 VS 用指令tune 过的大模型 基础大模型 只会对prompt的文本进行续写 所以当你向模型发问的时候&#xff0c;它往往会像复读机一样续写几个问题这是因为在它见过的语料库文本&#xff08;通常大多来自互联网&#xff09;中&#xff0c;通常会连续列举出N个问…...

设计模式 — — 单例模式

一、是什么 单例模式只会在全局作用域下创建一次实例对象&#xff0c;让所有需要调用的地方都共享这一单例对象 二、实现 // 单例构造函数 function CreateSingleton (name) {this.name name;this.getName(); };// 获取实例的名字 CreateSingleton.prototype.getName func…...

C++:菱形继承与虚继承

看下面这个示例代码 class A{ public: int num10; A(){cout<<"A构造"<<endl;} virtual void fun(){cout<<"A虚函数"<<endl;} };class B:public A{ public: B(){cout<<"B构造"<<endl;} void fun(){cout<…...

贡献法:USACO 2021 December Contest Bronze:孤独的照片

Farmer John 最近购入了 N 头新的奶牛&#xff0c;每头奶牛的品种是更赛牛&#xff08;Guernsey&#xff09;或荷斯坦牛&#xff08;Holstein&#xff09;之一。 奶牛目前排成一排&#xff0c;Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而&#xff0c;他…...

Java实现简单的通讯录

每日一言 泪眼问花花不语&#xff0c;乱红飞过秋千去。 —欧阳修- 简单的通讯录实现&#xff0c;跟写Java实现图书管理系统差不多&#xff0c;用到的知识也差不多&#xff0c;就当个小练习&#xff0c;练习一下写Java程序的手感。 Java实现图书管理系统 关于通讯录的代码都写…...

服务器数据恢复—raid5热备盘上线同步数据失败的如何恢复数据

服务器数据恢复环境&故障&分析&#xff1a; 一台存储上有一组由多块硬盘组建的raid5阵列&#xff0c;该raid5阵列中的一块硬盘掉线&#xff0c;热备盘自动上线同步数据的过程中&#xff0c;raid阵列中又有一块硬盘掉线&#xff0c;热备盘的数据同步被中断&#xff0c;r…...

探索C语言中的循环结构

循环结构是程序设计中一种重要的控制结构&#xff0c;它允许程序重复执行特定的代码块&#xff0c;直到满足某个条件为止。在C语言中&#xff0c;循环结构有多种形式&#xff0c;如for循环、while循环和do-while循环。本文将介绍C语言中的循环结构&#xff0c;并讨论它们的用法…...

数学建模-估计出租车的总数

文章目录 1、随机抽取的号码在总体的排序 1、随机抽取的号码在总体的排序 10个号码从小到大重新排列 [ x 0 , x ] [x_0, x] [x0​,x] 区间内全部整数值 ~ 总体 x 1 , x 2 , … , x 10 总体的一个样本 x_1, x_2, … , x_{10} ~ 总体的一个样本 x1​,x2​,…,x10​ 总体的一个样…...

设计模式在芯片验证中的应用——装饰器

一、装饰器模式 装饰器模式(Decorator)是一种结构化软件设计模式&#xff0c;它提供了一种通过向类对象添加行为来修改类对象的方法&#xff0c;而不会影响同一类的其它对象行为。该模式允许在不修改抽象类的情况下添加类功能。它从本质上允许基类代码对不可预见的修改具有前瞻…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...