《js高级程序设计》p139中讲解Array.from()方法。该方法是对数组执行浅拷贝,后进行测试。
浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
深拷贝:会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
此处加一句:浅拷贝的对象若包含子对象,当新的对象对子对象发生改变时则会使原对象子对象一同改变,若新的对象只改变第一层的数据,则源对象不会改变。
浅拷贝只是基础类型的拷贝,对于对象和数组只是复制其指针。而深拷贝是和源对象没有任何共享的,一般深拷贝通过循环遍历实现。
1 let a1 = [1, 2, 3, 4, [true, true], { "num": 0, "sum": 1 }]; 2 let a2 = Array.from(a1); 3 console.log(a1 == a2); //false 4 console.log(a1 === a2); //false 5 a1[0] = 0; 6 a1[4][0] = false; 7 a1[5].num = 1; 8 console.log(a1); // [0,2,3,4,[false,true],{num:1,sum:1}] 9 console.log(a2); //[1,2,3,4,[false,true],{num:1,sum:1}] 10 console.log(typeof (a1));//object 11 console.log(typeof (a2));//object 12 console.log(a2 instanceof Array);//true