浅拷贝与深拷贝 |
|
深拷贝 |
基本数据类型都是深拷贝 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);
标签:console,log,three,four,var,拷贝 From: https://www.cnblogs.com/liu521125/p/17849004.html