JavaScript数组复制的三种方法及常见误区
作者:代码拾荒时间:2026-10-24 10:15:04浏览:316
本文详解JavaScript中数组复制的常见错误与正确实现。直接赋值会导致引用共享,修改原数组影响副本。推荐使用slice(0)或concat()创建独立新数组,并通过完整HTML测试案例验证在IE8及FF3.0下的兼容性。
错误实现:直接赋值导致的引用问题
一、错误实现方式
许多开发者可能习惯直接使用等号进行赋值操作:
代码如下:
var array1 = new Array("1","2","3");
var array2;
array2 = array1;
array1.length = 0;
alert(array2); //返回为空 这种写法是错误的,因为JavaScript区分原始类型与引用类型(类似于Java和C#)。Array属于引用类型。
此时array2获取的是引用地址,因此对array1的任何修改都会直接反映在array2上。
正确实现:使用slice()与concat()方法
二、使用slice()方法
可以利用slice()函数进行复制,因为该函数返回一个新的数组对象。
代码如下:
var array1 = new Array("1","2","3");
var array2;
array2 = array1.slice(0);
array1.length = 0;
alert(array2); //返回1、2、3 三、使用concat()方法
需要注意,concat()返回的并非调用该函数的原Array实例,而是一个全新的Array对象,利用这一特性即可完成复制。
代码如下:
var array1 = new Array("1","2","3");
var array2;
array2 = array1.concat();
array1.length = 0;
alert(array2); //返回1、2、3 测试验证:多浏览器兼容性测试
四、测试验证
代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Array Test</title>
<script type="text/javascript">
var array1;
var array2;
function clone1() {
array1 = new Array("1","2","3");
array2 = array1;
array1.length = 0;
alert(array2);
}
function clone2() {
array1 = new Array("1","2","3");
array2 = array1.slice(0);
array1.length = 0;
alert(array2);
}
function clone3() {
array1 = new Array("1","2","3");
array2 = array1.concat();
array1.length = 0;
alert(array2);
}
</script>
</head>
<body>
<input type="button" value="clone1" onclick="clone1()" /><br />
<input type="button" value="clone2" onclick="clone2()" /><br />
<input type="button" value="clone3" onclick="clone3()" /><br />
</body>
</html> 在IE8及FF3.0环境下均通过测试
作者最新文章
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
JavaScript函数定义的三种方式:声明、表达式与箭头函数
2026-11-05 13:50:55
JavaScript中escape、encodeURI和encodeURIComponent对空格的处理差异
2026-11-05 12:47:23
相关标签:
