es6学习笔记

1:数组的复制

let aa = [1,2,3];
let bb =aa;
let cc = [...aa];
console.log(bb);      //[1, 2, 3]
console.log(cc);      //[1, 2, 3]
aa[0]=4;
console.log(bb);      //[4, 2, 3]
console.log(cc);      //[1, 2, 3]

因为数组的复制,只是引用地址的复制,原数组aa发生变化,直接复制的bb数组也跟着变化,使用...深度克隆数组,这样改变aa数组之后 cc数组不会变化!

2:数组的合并:

        let aa =[1,2,3];
        let bb =[4,5,6];
        let cc =[...aa,...bb];
        let dd = aa.concat(bb);
        console.log(cc); //[1, 2, 3, 4, 5, 6]
        bb[0]=8;
        console.log(cc); //[1, 2, 3, 4, 5, 6]
        console.log(dd); //[1, 2, 3, 4, 5, 6]

es5使用concat函数,es6直接使用。。。

3:数组的赋值:

        let aa =[1,2,3];
        let bb =[4,5,6];
        let cc =[...aa,...bb];
        let [d,...rest]=cc;
        console.log(d);//1
        console.log(rest);//[2, 3, 4, 5, 6]
        bb[2]=7;
        console.log(rest);//[2, 3, 4, 5, 6]

。。。rest保存剩下的数组,且是深度赋值,修改原数组aa,不影响rest

4:对象的复制:

 1        let aa ={
 2             name:'haha'
 3         };
 4         let bb ={
 5             age:'11',
 6             name:'change'
 7         };
 8         let cc ={};
 9         Object.assign(cc,aa,bb);
10         console.log(cc);//{name: "change", age: "11"}Object.assign(目标对象,原对象1,原对象2)


值得注意的是:

数组嵌套数组的数据格式,无法简单的用concat等方法达到深复制的目的:

比如:

var ceshiData = [
            [
                {
                    name:'huahua',
                    age:'11'
                },
                {
                    name:'xiaoming',
                    age:'20'
                }
            ]  
]

无法用下面的方法完成深复制的目的:

var aa = [];
aa= ceshiData.concat();
aa[0].push({
       name:'lili',
       age:'33'
 });
console.log(ceshiData);

这样还是会引用复制的!!

原文地址:https://www.cnblogs.com/xiaozhumaopao/p/8067031.html