Js 数组复制的问题

对于这样一个数组
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];
}
阅读 3.7k
4 个回答
  1. 这不是复制,只是赋值,将引用从一个传递到另一个

  2. 这是复制,data 的元素将与 initData 一模一样

  3. 这不仅仅是复制,除了 2 的功能还有属性拷贝。比如你先执行 initData.property = 3,复制后再执行 console.log(data.property) ,2 的结果是 undefined, 3 的结果是 3

第一个是直接值传递,其实是同一个数组;
第二个是一个新的复制得到的数组;
第三个是一个新的数组,但是对于{a: "d", b: x => x*2} 这样的value,还是值传递,是同一个value。

第一种也叫复制?
二三一样吧,都是浅复制,应该说对于纯粹的数组是一样的。

第一种就是数组对象的引用多了一个变量来保存了;

第二种是仅复制了第一层的深复制;

第三种包含了第二种的功能,并复制了数组作为对象所拥有的属性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题