javascript - Js 数组复制的问题
天蓬老师
天蓬老师 2017-04-11 12:06:34
[JavaScript讨论组]

对于这样一个数组
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];
}
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(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。

大家讲道理

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

PHPz

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

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号