Javascript 復(fù)制數(shù)組實(shí)現(xiàn)代碼
更新時(shí)間:2009年11月26日 18:44:30 作者:
Javascript 復(fù)制數(shù)組實(shí)現(xiàn)代碼,需要的朋友可以參考下。
一、 錯(cuò)誤實(shí)現(xiàn)
不少人可能直接就用等號(hào)進(jìn)行賦值了:
var array1 = new Array("1","2","3");
var array2;
array2 = array1;
array1.length = 0;
alert(array2); //返回為空
這種做法是錯(cuò)的,因?yàn)閖avascript分原始類型與引用類型(與java、c#類似)。Array是引用類
型。array2得到的是引用,所以對(duì)array1的修改會(huì)影響到array2。
二、 使用slice()
可使用slice()進(jìn)行復(fù)制,因?yàn)閟lice()返回也是數(shù)組。
var array1 = new Array("1","2","3");
var array2;
array2 = array1.slice(0);
array1.length = 0;
alert(array2); //返回1、2、3
三、 使用concat()
注意concat()返回的并不是調(diào)用函數(shù)的Array,而是一個(gè)新的Array,所以可以利用這一點(diǎn)進(jìn)行復(fù)制。
var array1 = new Array("1","2","3");
var array2;
array2 = array1.concat();
array1.length = 0;
alert(array2); //返回1、2、3
四、 測(cè)試
<!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下均通過(guò)測(cè)試
不少人可能直接就用等號(hào)進(jìn)行賦值了:
復(fù)制代碼 代碼如下:
var array1 = new Array("1","2","3");
var array2;
array2 = array1;
array1.length = 0;
alert(array2); //返回為空
這種做法是錯(cuò)的,因?yàn)閖avascript分原始類型與引用類型(與java、c#類似)。Array是引用類
型。array2得到的是引用,所以對(duì)array1的修改會(huì)影響到array2。
二、 使用slice()
可使用slice()進(jìn)行復(fù)制,因?yàn)閟lice()返回也是數(shù)組。
復(fù)制代碼 代碼如下:
var array1 = new Array("1","2","3");
var array2;
array2 = array1.slice(0);
array1.length = 0;
alert(array2); //返回1、2、3
三、 使用concat()
注意concat()返回的并不是調(diào)用函數(shù)的Array,而是一個(gè)新的Array,所以可以利用這一點(diǎn)進(jìn)行復(fù)制。
復(fù)制代碼 代碼如下:
var array1 = new Array("1","2","3");
var array2;
array2 = array1.concat();
array1.length = 0;
alert(array2); //返回1、2、3
四、 測(cè)試
復(fù)制代碼 代碼如下:
<!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下均通過(guò)測(cè)試
您可能感興趣的文章:
- jQuery中json對(duì)象的復(fù)制方式介紹(數(shù)組及對(duì)象)
- JavaScript數(shù)組復(fù)制詳解
- JavaScript 數(shù)組的深度復(fù)制解析
- javascript 三種數(shù)組復(fù)制方法的性能對(duì)比
- javascript復(fù)制對(duì)象使用說(shuō)明
- js中如何復(fù)制一個(gè)對(duì)象并獲取其所有屬性和屬性對(duì)應(yīng)的值
- 原生js實(shí)現(xiàn)復(fù)制對(duì)象、擴(kuò)展對(duì)象 類似jquery中的extend()方法
- 深入理解JavaScript中的對(duì)象復(fù)制(Object Clone)
- 改進(jìn)版通過(guò)Json對(duì)象實(shí)現(xiàn)深復(fù)制的方法
- JavaScript數(shù)組和對(duì)象的復(fù)制
相關(guān)文章
JS阻止冒泡事件以及默認(rèn)事件發(fā)生的簡(jiǎn)單方法
這篇文章主要介紹了JS阻止冒泡事件以及默認(rèn)事件發(fā)生的簡(jiǎn)單方法,有需要的朋友可以參考一下2014-01-01
javascript向flash swf文件傳遞參數(shù)值注意細(xì)節(jié)
如何使用javascript向SWF文件傳遞參數(shù)?在網(wǎng)上找了一個(gè)完整的教程,很有啟發(fā)性和實(shí)用性,如下是完整實(shí)現(xiàn)的步驟,需要的朋友可以參考下2012-12-12
JavaScript高級(jí)程序設(shè)計(jì)(第3版)學(xué)習(xí)筆記11 內(nèi)建js對(duì)象
內(nèi)建對(duì)象是指由ECMAScript實(shí)現(xiàn)提供的、不依賴于宿主環(huán)境的對(duì)象,這些對(duì)象在程序運(yùn)行之前就已經(jīng)存在了2012-10-10
JavaScript中l(wèi)et避免閉包造成問(wèn)題
這篇文章主要介紹了JavaScript中l(wèi)et避免閉包造成問(wèn)題,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
javascript如何創(chuàng)建表格(javascript繪制表格的二種方法)
利用js來(lái)動(dòng)態(tài)創(chuàng)建表格有兩種格式,appendChild()和insertRow、insertCell()。兩種方式其實(shí)差不多,但第一種有可能在IE上有問(wèn)題,所以推薦大家使用第二種方法,看下面的解決和使用方法2013-12-12
JavaScript 詳解緩動(dòng)動(dòng)畫的封裝與使用
緩動(dòng)動(dòng)畫原理:移動(dòng)的像素慢慢減少,讓效果看起來(lái)更柔和更美觀,通過(guò)定時(shí)器加回調(diào)函數(shù),實(shí)現(xiàn)動(dòng)畫效果以及更多具體功能,非常好用2021-11-11
javascript中的3種繼承實(shí)現(xiàn)方法
這篇文章主要介紹了javascript中的3種繼承實(shí)現(xiàn)方法,包括使用Object.create實(shí)現(xiàn)類式繼承、使用utilities工具包自帶的util.inherites、使用extends關(guān)鍵字,非常的實(shí)用,希望對(duì)大家了解javascript繼承能夠有所幫助2016-01-01

