原生js实现深度克隆】的更多相关文章

总体思路: 判断对象当中的值为引用值还是原始值 如果是引用值,判断是数组还是对象,如果是原始值直接copy 递归 注意:不要忘了排除null,因为typeof null = 'object' function deepClone (origin,target) { var target = target || {}; var toStr = Object.prototype.toString; var typeArr = '[object Array]'; for (var prop in or…
我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天来写写,JS中的深度克隆,这个在笔面试中,考的还是比较多的,主要是对象与数组的赋值,如果直接赋值的话,那么得到的是对象或者数组在堆里的地址,那么原有的的数据修改的话,那么克隆的数据也会随着修改,这就是浅克隆,所以这边就要使用到枚举,然后再每一项赋值,这样就可以完成一份深度克隆,这样原对象里修改属性,如果你在这对象修改之前已经克隆的话,那么你这个克隆的对象,对象里的属性是不变,这就是深度克隆.话不多说了,直接上代码: // 假设要克隆的对…
一.js中的对象 谈到对象的克隆,必定要说一下对象的概念. js中的数据类型分为两大类:原始类型和对象类型. (1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原始值,这里不做详细的说明,我的上一篇博客有谈到过一些) (2)对象类型包括:对象即是属性的集合,当然这里又两个特殊的对象----函数(js中的一等对象).数组(键值的有序集合). 好了既然对象分为这两类,这两种类型在复制克隆的时候是有很大区别的.原始类型存储的是对象的实际数据,而对象类型存储的是对象的…
首先看一个例子: var student = { name:"yxz", age:25 } var newStudent = student; newStudent.sex = "male"; console.log(student); //{name:"yxz",age:25,sex:"male"} 由此可见,将一个对象通过简单的传递赋值传递给一个新的变量时,仅仅是给该对象增添了一个别名.所以,对该别名的操作也会作用到原对象…
先看一下克隆成功后的结果 深度克隆就是将obj的属性克隆到obj1上面,并且在obj上面修改属性不影响obj1上面的属性. 1.先把所有的值都遍历一遍(看是引用值和原始值)用for ( var prop in obj ),对象和数组都可以使用2.判断是原始值,还是引用值?用typeof判断是不是object1)如果是原始值就直接拷贝2)如果是引用值,判断是数组还是对象3.判断是数组还是对象?(方法instanceof[看a的原型链上有没有b的原型].toString.constructor,建议…
var json = {a:6,b:4,c:[1,2,3]}; var json2 = clone(json); function clone(obj){ var oNew = new obj.constructor(obj.valueOf()); if(obj.constructor == Object){ for(var i in obj){ oNew[i] = obj[i]; if(typeof(oNew[i]) == 'object'){ clone(oNew[i]); } } } re…
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js对象的深度克隆</title> </head> <body> <script type="text/javascript"> var cloneObj = function(obj) { var s…
首先,我们要知道,javascript中除了基本类型(number,string,boolean,null,undefined)之外就是引用类型了,也可以说就是js对象了. 引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响. 在探讨到深度克隆之前,我们先来看一下下面的例子: example01: var a = [1,2,3]; var b = a; // a b共用一个引用 b.push(4); alert(b); // [1,2,3,4]…
js深度克隆对象 js深度克隆对象简单的记录一下,如下代码: var obj = { typeOf: function(obj) { const toString = Object.prototype.toString; const map = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[o…
1.深度克隆的原理 JS中的深度克隆,指的是原对象改变了,克隆出来的新对象也不会改变,原对象与新对象是完全独立的关系. 实现深度克隆的原理得从对象是一种引用类型说起 众所周知,对象是一种引用类型,对象的地址指针存放于栈中,而对象实际的数据存放于堆中. 因此当我们简单地执行复制操作时,实际是把地址指针进行了复制操作,因此在对象的实际数据改变之后,新老对象都会受到影响. 那么如何让他不受到影响呢? 答案是利用基本数据类型的特点,基本类型在执行复制操作后,新老数值之间不会互相产生影响 所以,我们要对对…