数组深层拷贝利用了一个方法arr.concat()有点不太明白?mdn里面好像没有这个吧,不传参的形式
数组:
var arr = ["a", "b"];
var arrCopy = arr;
arrCopy[1] = "c";
console.log(arr); //["a","c"];
浅拷贝与深层的拷贝?
上面的数组来说:发现对arrCopy继续拧拷贝时元数组也会进行响应的操作(变化),这就是JS的浅层拷贝, 即:对于数组、对象、对象数组进行简单复制只是创建了一份原内容的引用,指向的仍然是同一块内存区域,修改的时候会对应修改原有的内容,而有时候我们却不需要这种拷贝模式,即我么需要对原内容进行深层拷贝。
数组的深层拷贝
console.log("------");
var arr = ["a", "b"];
arrCopy = [];
for (var key in arr) {
arrCopy[key] = arr[key];
}
arrCopy[1] = "c";
console.log(arr); //["a","b"]
console.log(arrCopy); //["a","c"]
数组深层次的拷贝方式2:slice()
arrCopy = arr.slice(0);
arrCopy[1] = "c";
console.log(arr); //["a","b"]
console.log(arrCopy); //["a","c"];
数组深层拷贝方式三 concat();
arrCopy = arr.concat(); //???
arrCopy[1] = "c";
console.log(arr); //["a","b"];
console.log(arrCopy); //["a","c"];//?????
concat()
方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。可以接受0个或多个参数,下面是摘自ECMAScript标准的一段话。