【js优雅的实现深拷贝的方法】教程文章相关的互联网学习教程文章

深入剖析javaScript中的深拷贝和浅拷贝

在面试时经常会碰到面试官问:什么是深拷贝和浅拷贝,请举例说明?如何区分深拷贝与浅拷贝,简单来说,假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝;我们先看两个简单的案例://案例1(深拷贝) var a1 = 1, a2= a1; console.log(a1) //1 console.log(a2) //1 a2 = 2; //修改 a2 console.log(a1) //1 console.log(a2) //2 //案例2(浅拷贝) var o1 = {x: 1, y: 2}, o2...

javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法

一、数组浅拷贝 在js中,数组和对象的复制如果使用=号来进行复制,那只是浅拷贝。如下图演示:let arr = [1,2,3]let arr2 = arrarr[1] = 4console.log(arr2)// 输出[1,4,3] 如上,arr的修改,会影响arr2的值,这就是浅拷贝了。这显然在绝大多数情况下,并不是我们所需要的结果,因此,数组以及对象的深拷贝就是javascript的一个基本功了。 二、数组深拷贝 2.1、for 循环实现数组的深拷贝 for循环是非常好用的。如果不知道高级方法,...

JavaScript深拷贝【图】

运行结果展示: 归纳: 1.concat也能实现深拷贝,但是只能拷贝一层,对于嵌套数组里面的值无法修改2.判断数组的方法 (1)Array.isArray(arr) (2)arr.constructor == Array (注意:两个等号,且没有引号) (3)obj instanceof Array 3.深拷贝和浅拷贝还有其他方法,但是上面的是通用方法

浅析js的数据类型、堆内存栈内存、深拷贝浅拷贝、js的垃圾回收机制【代码】【图】

前言 本身在面试博客里只是想整理一下js的类型,突然越联想越感觉这块的知识体量比较大,扩展很多,但网上的很多理解繁杂还不太清晰,故此专门记录一下这几个点。 正文 js中的数据类型基本类型:number ,string,null,Boolen,undefined,symbol 引用类型:object (Array,Function,Date,Regxp在es6中规定都是object类型)两者的区别: 基本类型:可以直接操作的实际存在的数据段。存在在内存的栈中,比较的是值的比较! 引用类...

清晰易懂!讲解JS赋值、浅拷贝和深拷贝【代码】【图】

一些问题 // 赋值1 let obj1 = {a: 1,b: 2 }let obj2 = obj1 obj2.a = 3console.log(obj1) // ? console.log(obj2) // ?// 赋值2 let obj1 = {a: 1,b: 2,c: {q: 6} }let obj2 = obj1 obj2.a = 3 obj2.c.q = 7console.log(obj1) // ? console.log(obj2) // ?// 浅拷贝1 let obj1 = {a: 1,b: 2 } let obj2 = Object.assign({}, obj1) obj2.a = 3console.log(obj1) // ? console.log(obj2) // ?// 浅拷贝2 let obj1 = {a: 1,b: 2,c: {...

JS深拷贝和浅拷贝

深浅拷贝区别 我们都知道JS中有两种数据类型,一种是基本数据类型,一种是引用数据类型,基本数据类型是按值访问的,即在操作基本类型的变量时,是直接修改变量的值,而引用数据类型的值是按引用访问的,什么是按引用访问的呢? JS的引用类型,也叫对象类型,是保存在内存中的,而在JS中又无法直接操作内存中的对象,实际上操作的是对象的引用,因此在引用类型变量在进行复制操作时,并不是对对象值的直接复制,而是将对象的引用复...

JS实现深拷贝常用的几种方法【代码】

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS深拷贝的几种方法</title> </head> <body><script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script><script>let origin = ['李白','赵云','王昭君','裴擒虎','元歌']/*** 1. Object.assign() 实现深拷贝 --- 个人常用*/// let target = Object.assign(...

10代码实现一个JS深拷贝函数【代码】【图】

JS深拷贝概念并不新鲜,但是真正要真正理解原理还是有点难度的。这也是JS语言精粹之一吧。例子let a = {name: 'demo',age: 18 }; let b = a; b.name = 'demo1'; console.log(a); // 输出 {name: "demo1", age: 18} console.log(b); // 输出 {name: "demo1", age: 18} 因为JS对于对象的赋值使用的是浅拷贝,其中一个实例变量的赋值会影响到所有指向该对象的变量 解决方案粗暴好使的 JSON.parse(JSON.stringify),缺点: 丢失成员函数...

js 数组的深拷贝【代码】

1.Array.from() 2.slice() 3.扩展运算符 4.Object.assign() 5.concat() var oldArr = [1,2,3,[4,5,6],7] // 可以使用以上5中方法进行拷贝,但是都会出现同一个问题,就是对内层数组 // 的拷贝仅仅拷贝了内存地址,并没有给予新的内存地址进行保存 // 比如: var newArr = oldArr.slice() oldArr[0] = 10 console.log(oldArr[0]) // 10 console.log(newArr[0]) // 1oldArr[3][0] = 20 console.log(oldArr[3][0]) // 20 console.log(n...

js的深拷贝【代码】

// 深拷贝和浅拷贝的区别?如何实现? // 深拷贝:拷贝后的结果 更改是不会影响拷贝前的 拷贝前后是没有关系的 // 浅拷贝:改变前的内容,会对拷贝之后的有影响 拷贝前和拷贝后是有关系的// 引用关系的问题 // ...运算符 只能拷贝一层 一层运算的时候是深拷贝,多层对象的时候是浅拷贝 典型的浅拷贝 let obj={name:'jim',address:{x:100,y:100} }let o={...obj}; obj.name='hello'; obj.address.x=200;console.log(obj===...

JS - 深拷贝【代码】【图】

可拷贝原始类型:Number、Boolean、String、Symbol、BigInt 可拷贝引用类型:Set、Map、Date、RegExp、Function、Array、Objectfunction deepClone(target){//判断是否为对象const isObject = target => {if(target === null){return false;}else {return typeof target === 'object' || typeof target === 'function';}}//获取数据类型const getType = target => {return Object.prototype.toString.call(target).slice(8, -1);}/...

JAVASCRIPT - 技术教程分类
JavaScript 教程 JavaScript 简介 JavaScript 用法 JavaScript Chrome 中运行 JavaScript 输出 JavaScript 语法 JavaScript 语句 JavaScript 注释 JavaScript 变量 JavaScript 数据类型 JavaScript 对象 JavaScript 函数 JavaScript 作用域 JavaScript 事件 JavaScript 字符串 JavaScript 运算符 JavaScript 比较 JavaScript 条件语句 JavaScript switch 语句 JavaScript for 循环 JavaScript while 循环 JavaScript break 和 continue 语... JavaScript typeof JavaScript 类型转换 JavaScript 正则表达式 JavaScript 错误 JavaScript 调试 JavaScript 变量提升 JavaScript 严格模式 JavaScript 使用误区 JavaScript 表单 JavaScript 表单验证 JavaScript 验证 API JavaScript 保留关键字 JavaScript this JavaScript let 和 const JavaScript JSON JavaScript void JavaScript 异步编程 JavaScript Promise JavaScript 代码规范 JavaScript 函数定义 JavaScript 函数参数 JavaScript 函数调用 JavaScript 闭包 DOM 简介 DOM HTML DOM CSS DOM 事件 DOM EventListener DOM 元素 HTMLCollection 对象 NodeList 对象 JavaScript 对象 JavaScript prototype JavaScript Number 对象 JavaScript String JavaScript Date(日期) JavaScript Array(数组) JavaScript Boolean(布尔) JavaScript Math(算数) JavaScript RegExp 对象 JavaScript Window JavaScript Window Location JavaScript Navigator JavaScript 弹窗 JavaScript 计时事件 JavaScript Cookie JavaScript 库 JavaScript 实例 JavaScript 对象实例 JavaScript 浏览器对象实例 JavaScript HTML DOM 实例 JavaScript 总结 JavaScript 对象 HTML DOM 对象 JavaScript 异步编程 javascript 全部