对于这样一个数组 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];
}
对于这样一个数组 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];
}
第一个是直接值传递,其实是同一个数组;
第二个是一个新的复制得到的数组;
第三个是一个新的数组,但是对于{a: "d", b: x => x*2} 这样的value,还是值传递,是同一个value。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
这不是复制,只是赋值,将引用从一个传递到另一个
这是复制,
data
的元素将与initData
一模一样这不仅仅是复制,除了 2 的功能还有属性拷贝。比如你先执行
initData.property = 3
,复制后再执行console.log(data.property)
,2 的结果是undefined
, 3 的结果是3
。