深拷贝与浅拷贝

发布时间 2023-11-22 14:53:59作者: 刘先生的爱心博客

浅拷贝与深拷贝

 

深拷贝

基本数据类型都是深拷贝 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);