猿问

使用 Array.concat 完成数组深层拷贝是什么原理?

数组深层拷贝利用了一个方法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"];//?????


守候你守候我
浏览 637回答 2
2回答

www说

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。可以接受0个或多个参数,下面是摘自ECMAScript标准的一段话。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答