jjdp.net
当前位置:首页 >> js深浅克隆 >>

js深浅克隆

浅克隆就是将栈内存中的引用复制一份,赋给一个新的变量,本质上两个指向堆内存中的同一地址,内容也相同,其中一个变化另一个内容也会变化.深克隆就是创建一个新的空对象,开辟一块内存,然后将原对象中的数据全部复制过去,完全切断两个对象间的联系.

1.浅拷贝:复制一份引用,所有引用对象都指向一份数据,并且都可以修改这份数据.2.深拷贝(复杂):复制变量值,对于非基本类型的变量,则递归至基本类型变量后,再复制.一、数组的深浅拷贝 在使用JavaScript对数组进行操作的时候

一、数组的深浅拷贝 在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生.var arr = ["

?:上面的这个是一个三元运算符a = n>0 ? 1:2n>0成立的话,a=1,否则a=2;可以这样看a = (n>0 ? 1:2)先计算括号中的结果,再赋值给a []是数组,{}是对象,就是把c[i] 设成一个数组,或对象.

所谓“深复制”,就是能够实现真正意义上的数组和对象的复制.它的实现并不难,只要递归调用”浅复制”就行了. function deepCopy(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] === 'object') { c[i] = (p[i].constructor === Array) ? [] : {}; deepCopy(p[i], c[i]); } else { c[i] = p[i]; } } return c; }

浅拷贝:只复制对象的引用,此时对对象内容的修改直接作用于原对象内容.深拷贝(深度克隆):复制对象的内容,此时对对象内容的修改是独立的,不会影响到之前的对象.所以这是编程时的选择问题,如果你想拥有当前对象内容的复制,从而独立地对它进行操作,就用深度克隆

type函数首先我们要实现一个getType函数对元素进行类型判断,关于元素的类型判断,可以参考我另一篇博文 js中typeof和instanceof详解 ,这里用一个更简便的方法,直接调用Object.prototype.toString 方法.function getType(obj){//tostring会返

// 浅拷贝 function copy(o) { var result = {}; for(var i in o) result[i] = o[i]; return result; } // 深拷贝 function deepCopy(o) { var result = {}; for(var i in o) result[i] = (typeof o[i]) === 'object' ? deepCopy(o[i]) : o[i]; return result; }这就是浅拷贝,大兄弟

第一种严格来说不叫克隆.a和b指向同一个对象,修改b的时候其实a也被修改了第二种是把a做了一个复制,然后把复制出来的新对象给b,修改b的时候a不会变

最快速的方式复制一个数组:var arr = [1,2,3];var copyArr = arr.slice();

网站首页 | 网站地图
All rights reserved Powered by www.jjdp.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com