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

JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)

前言 说到深浅拷贝,必须先提到的是JavaScript的数据类型,之前的一篇文章JavaScript基础心法——数据类型说的很清楚了,这里就不多说了。 需要知道的就是一点:JavaScript的数据类型分为基本数据类型和引用数据类型。 对于基本数据类型的拷贝,并没有深浅拷贝的区别,我们所说的深浅拷贝都是对于引用数据类型而言的。 浅拷贝 浅拷贝的意思就是只复制引用,而未复制真正的值。 const originArray = [1,2,3,4,5]; const originObj =...

详解JS数据类型的值拷贝函数(深拷贝)

废话不多说了,直接给大家贴代码了,具体代码如下所示: function mottoClone (obj) {if (obj === null || typeof obj !== object) return obj;if (obj instanceof Boolean) return new Boolean(obj.valueOf());if (obj instanceof Number) return new Number(obj.valueOf());if (obj instanceof String) return new String(obj.valueOf());if (obj instanceof RegExp) return new RegExp(obj.valueOf());if (obj instanceof Date) ...

javascript深拷贝的原理与实现方法分析

本文实例讲述了javascript深拷贝的原理与实现方法。分享给大家供大家参考,具体如下: 要讲JavaScript的拷贝,就得先讲讲javascript中的值传递和引用传递。 javascript中没有一个具体的语法来规定哪些参数是引用传递,而其他语言中都有明文规定,比如 C# 中的 ref 和 PHP 中的 & 。这也是javascript众多弊端中的一个。 我们先看看下面这段代码: //值传递 var i = 3; var j = i; j = 4; document.write(i);//3 //引用传递 var m = ...

jQuery的$.extend 浅拷贝与深拷贝

jQuery的$.extend 浅拷贝与深拷贝 $.extend( [deep ], target, object1 [, objectN ] );deep 类型: Boolean 如果是true,合并成为递归(又叫做深拷贝)。target 类型: Object 对象扩展。这将接收新的属性。object1 类型: Object 一个对象,它包含额外的属性合并到第一个参数。 objectN 类型: Object 包含额外的属性合并到第一个参数。 $.extend浅拷贝: var obj1 = {name:xx,age:18,sex:man}; var obj2 = {name:cc,age:18...

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

1、javaScript的变量类型 (1)基本类型:5种基本数据类型Undefined、Null、Boolean、Number 和 String,变量是直接按值存放的,存放在栈内存中的简单数据段,可以直接访问。(2)引用类型:存放在堆内存中的对象,变量保存的是一个指针,这个指针指向另一个位置。当需要访问引用类型(如对象,数组等)的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。 JavaScript存储对象都是存地址的,所以浅拷贝会导...

javascript深拷贝和浅拷贝详解

一、数组的深浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生。 这是为什么呢? 因为如果只是简单的赋值,它只是进行了地址的引用,所以改变一个另一个也会跟着变。 var arr = ["One","Two","Three"]; var arrto = arr; arrto[1] = "test"; document.writeln("数组的原始值:"...

JavaScript 中对象的深拷贝

对象的深拷贝与浅拷贝的区别如下: 浅拷贝:仅仅复制对象的引用,而不是对象本身; 深拷贝:把复制的对象所引用的全部对象都复制一遍。 一. 浅拷贝的实现 浅拷贝的实现方法比较简单,只要使用是简单的复制语句即可。 1.1 方法一:简单的复制语句 /* ================ 浅拷贝 ================ */ function simpleClone(initalObj) { var obj = {}; for ( var i in initalObj) { obj[i] = initalObj[i]; } ...

JavaScript数组深拷贝和浅拷贝的两种方法

例如这个例子: 代码如下:var arr = ["One","Two","Three"];var arrto = arr;arrto[1] = "test";document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,test,Threedocument.writeln("数组的新值:" + arrto + "<br />");//Export:数组的新值:One,test,Three 像上面的这种直接赋值的方式就是浅拷贝,很多时候,这样并不是我们想要得到的结果,其实我们想要的是arr的值不变,不是吗? 方法一:js的slice...

javascript 深拷贝

我们先看一下浅复制的缺陷,不知多少人中过招呢? 代码如下:var oOriginal = { memNum: 1, // number memStr: "I am a string", // string memObj: { test1: "Old value" // well test }, memArr: [ // array "a string", // string member of array { // object member of array test2: "Try changing me" // well test } ] }; 这是一个比较复杂的对象,对象包含着对象与数组。我们用Prototype著名的继承函数复杂一下。它那个东...

js 深拷贝函数

function objectClone(obj,preventName){ if((typeof obj)=='object'){ var res=(!obj.sort)?{}:[]; for(var i in obj){ if(i!=preventName) res[i]=objectClone(obj[i],preventName); } return res; }else if((typeof obj)=='function'){ return (new obj()).constructor; } return obj; }

Javascript 浅拷贝、深拷贝的实现代码

什么是"clone"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的。在Java/javasript语言中,用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高效的手段,当然了 javascrip...

什么是js深拷贝和浅拷贝及其实现方式

今天来给大家说一下JS的js深拷贝和浅拷贝,它们有什么区别,有什么作用呢?下面给大家举例说明一下。var m = { a: 10, b: 20 }var n = m;n.a = 15;// 这时m.a的值是多少m.a会输出15,因为这是浅拷贝,n和m指向的是同一个堆,对象复制只是复制的对象的引用。深拷贝深拷贝和上面浅拷贝不同,就是彻底copy一个对象,而不是copy对象的引用,例如,还是之前的例子,我们这么写:var m = { a: 10, b: 20 }var n = {a:m.a,b:m.b};n.a = 15...

js中对象深拷贝和浅拷贝的区别是什么【代码】【图】

基本数据类型,拷贝是直接拷贝变量的值,而引用类型拷贝的其实是变量的地址。而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有重新创建一个新的对象,则认为是浅拷贝;反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。深拷贝实例代码:let o2 = JSON.parse(JSON.stringify...

javascript的深拷贝和浅拷贝【代码】【图】

如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。 所谓深浅拷贝,都是进行复制,那么区别主要在于复制出来的新对象和原来的对象是否会互相影响,改一个,另一个也会变 浅拷贝(Shallow Copy) VS 深拷贝(Deep Copy) 一、如何实现深拷贝 1 递归function deepClone(source){ if(!source && typeof sour...

Javascript深拷贝【代码】

为了实现一个函数clone,可以对JavaScript中5种主要的数据类型 (包括Number、String、Object、Array、Boolean)进行值(深)复制。/***复制一份数据*@paramobj*return复制结果***/function clone(obj){var buf;if(obj instanceof Array){var i=obj.length;buf=[];//向空的数组中复制内容while(i--){buf[i]=clone(obj[i])}return buf;}else if(obj instanceof Object){buf={};//向空的对象中复制内容for(var i in obj){buf[i]=clon...

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 全部