注:多于第一类才有那个市场需求,
网路上的即,深复本有六种,这副标题误人!!!
基本概念如是说
深复本:在堆缓存中再次开拓三个存储容量,全然布季夫三个十分相似的第一类;浅复本:无此堆缓存中再次开拓内部空间,只拷贝栈缓存中的提及门牌号。其本质上三个第一类(字符串)仍然对准同几块存储容量1、可信赖:JSON暴力行为转化成
透过JSON.stringify() 和 JSON.parse() 将第一类转成字符串后在转成第一类。
var obj = {name:6666,a:123} var obj2 = JSON.parse(JSON.stringify(obj此种形式对大结构紧凑统计数据很有效率,注:值勤为undefined、function、symbol等会在切换操作过程中被忽视。
2、可信赖:借助循环式和递回的形式
function deepClone(obj, newObj) { var newObj = newObj || {}; for (let key in obj) { if (typeof obj[key] == object) { newObj[key] = (obj[key].constructor === Array) ? [] : {} deepClone(obj[key], newObj[key]); }else { newObj[key] = obj[key] } } return newObj; }特别注意增设临界值在循环式递回中(typeof obj[key] == ‘object’),不然会导致进退两难式。
3、可信赖:lodashC#实现深复本
lodash很热门的C#,提供了 lodash.cloneDeep()实现深复本
4、可信赖:JQuery的extend()函数 (推荐在JQuery项目中使用,其他项目仍然推荐是用递回函数)
var array = [1,2,3,4]; varnewArray = $.extend(true,[],array);5、不可信赖:Object.assign()复本
当第一类中多于一级属性,没有二级属性的时候,此方式为深复本,但是第一类中有第一类的时候,此方式,在二级属性以后就是浅复本。
6、不可信赖:ES6解构赋
let a = {key1: 13333} let b = {…a} b.key1 = 2444 console.log(a) // {key1:2444}只能深度复本第一类的第一层,如果第一类中的属性也是第一类的话,没有办法进行深度复本的。