深拷贝与浅拷贝
浅拷贝与深拷贝 |
|
深拷贝 |
基本数据类型都是深拷贝 a=b 改变a的值 b不会改变 |
浅拷贝 |
引用数据类型都是浅拷贝a=b 改变a的值 b也会改变 |
想把浅拷贝改为深拷贝用for 或者...拓展运算符
注意 此方法只能是数组中是基本数据类型 要想把数组中引用数据类型 改变 要用递归
|
for (var i = 0; i < three.length; i++) { // four.push(three[i]);
// } // console.log(three, four); // three[1] = 6; // console.log(three, four);
|
递归 改变浅拷贝 |
var person1 = ['章三', 18, ['篮球', '足球', '羽毛球']]; var person2 = []; // p要拷贝的数据;c 生成的新数组 function Copy(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] === "object") { c[i] = (p[i].constructor === Array) ? [] : {} Copy(p[i], c[i]); } else { c[i] = p[i] } } return c; } person2 = Copy(person1, person2); person1[0] = '李四' person1[2][0] = '李四' console.log(person1); console.log(person2);
|
// 基本数据类型都是深拷贝 深拷贝为 a=b 改变a的值 b不会改变; // var one = 1; // var two = one; // console.log(one, two); // one = 2; // console.log(one, two); // 引用数据类型都是浅拷贝 浅拷贝为 a=b 改变a的值 b会改变; // var three = [1, 2, 3]; // var four = []; // console.log(three, four); // three[1] = 6; // console.log(three, four); //想要把浅拷贝改为深拷贝 //要用for 或...扩展运算符 但是这个只能是数组中是基本数据类型时才能使用 // for (var i = 0; i < three.length; i++) { // four.push(three[i]); // } // console.log(three, four); // three[1] = 6; // console.log(three, four); // 如果数组中又包含数组 可以用递归 // var three = ['章三', 18, ['篮球', '足球', '羽毛球']]; // var four = []; // function Copy(a, c) { // // 判断p有没有被调用; // var c = c || {}; // for (var i in a) { // if (typeof (a[i] === "Object")) { // c[i] = (a[i].constructor === Array) ? [] : {}; // Copy(a[i], c[i]); // } else { // c[i] = a[i] // } // } // return c; // } // four = Copy(three, four); // three[1] = 'one'; // three[3][0] = 7 // console.log(four); // console.log(three); var person1 = ['章三', 18, ['篮球', '足球', '羽毛球']]; var person2 = []; // p要拷贝的数据;c 生成的新数组 function Copy(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] === "object") { c[i] = (p[i].constructor === Array) ? [] : {} Copy(p[i], c[i]); } else { c[i] = p[i] } } return c; } person2 = Copy(person1, person2); person1[0] = '李四' person1[2][0] = '李四' console.log(person1); console.log(person2);
本文来自博客园,作者:刘先生的爱心博客,转载请注明原文链接:https://www.cnblogs.com/liu521125/p/17849004.html
一点一滴记录着学习html5 css3 和js 的时光
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通