JavaScript数组复制:浅拷贝与concat深拷贝的区别
本文解析JavaScript中数组复制的常见误区。通过对比直接赋值与concat方法,阐述引用类型数据共享内存地址导致的浅拷贝问题,并演示如何利用concat()实现数组内容的独立复制,避免修改副本时影响原数组。
JavaScript数组复制:浅拷贝与concat深拷贝的区别
在JavaScript开发中,若需对数组进行复制操作,开发者通常会考虑以下几种实现路径。
代码
var arr1 = [1,2,3,4,5];
var arr2 = [];
arr2 = arr1;
console.log(arr1);
console.log(arr2);
运行上述代码,控制台输出结果如下所示。
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
该示例展示了将数组arr1直接赋值给变量arr2的过程。
观察控制台输出,看似成功复制了数组内容并生成了一个新的相同数组。
然而,由于数组在JavaScript中属于“引用类型”数据,直接赋值并不会复制其实际值,而是让两个变量指向同一块内存地址。
基于上述原理,我们进一步编写以下测试代码。
arr2.push(6);
console.log(arr1);
console.log(arr2);
再次运行代码,观察到的结果如下。
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6]
从执行结果可以看出,即便仅向arr2追加新元素6,原数组arr1中也随之增加了元素6。这正是由于两个变量共同引用了同一存储位置所致。
这意味着,只要修改任一数组中的数据,另一个数组的内容也会同步发生变化,因为二者指向相同的内存空间。
为解决此问题,下文将介绍如何使用concat方法来实现数组的独立复制。
具体实现示例如下。
var arr1 = [1,2,3,4,5];
var arr2 = [];
arr2 = arr1.concat();
arr2.push(6);
console.log(arr1);
console.log(arr2);
运行该示例,控制台输出结果如下。
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
若需将数组arr1的内容复制到arr2,只需在源数组arr1上调用concat()方法即可实现。
JS动态构建复杂嵌套JSON对象的方法
2026-11-05 15:41:52
JS负数取余为什么是负数?详解余数与模运算区别
2026-11-05 13:34:41
JS 解压出现乱码或报错怎么解决?
2026-11-05 12:32:38
JS 中 startsWith、indexOf 与正则判断字符串前缀的对比
2026-11-04 22:19:43
JS解析Excel后怎么将数据转换为JSON格式
2026-11-04 20:58:28
相关标签:
