对于这样一个数组 var initData=[1, "s", {a: "d", b: x => x*2} ];
以下3种复制的方法都有什么区别?
//method 1
var data = initData;
//method 2
var data = initData.slice();
//method 3
var data=[];
for (var variable in initData) {
data[variable] = initData[variable];
}
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
这不是复制,只是赋值,将引用从一个传递到另一个
这是复制,
data的元素将与initData一模一样这不仅仅是复制,除了 2 的功能还有属性拷贝。比如你先执行
initData.property = 3,复制后再执行console.log(data.property),2 的结果是undefined, 3 的结果是3。第一个是直接值传递,其实是同一个数组;
第二个是一个新的复制得到的数组;
第三个是一个新的数组,但是对于{a: "d", b: x => x*2} 这样的value,还是值传递,是同一个value。
第一种也叫复制?
二三一样吧,都是浅复制,应该说对于纯粹的数组是一样的。
第一种就是数组对象的引用多了一个变量来保存了;
第二种是仅复制了第一层的深复制;
第三种包含了第二种的功能,并复制了数组作为对象所拥有的属性。