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分原始類(lèi)型與引用類(lèi)型(與java、c#類(lèi)似)。Array是引用類(lèi)
型。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分原始類(lèi)型與引用類(lèi)型(與java、c#類(lèi)似)。Array是引用類(lèi)
型。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ì)象 類(lèi)似jquery中的extend()方法
- 深入理解JavaScript中的對(duì)象復(fù)制(Object Clone)
- 改進(jìn)版通過(guò)Json對(duì)象實(shí)現(xiàn)深復(fù)制的方法
- JavaScript數(shù)組和對(duì)象的復(fù)制
相關(guān)文章
通過(guò)一段代碼簡(jiǎn)單說(shuō)js中的this的使用
本文通過(guò)一段代碼與大家簡(jiǎn)單說(shuō)說(shuō)js中this的使用及相關(guān)問(wèn)題,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07JS中處理時(shí)間之setUTCMinutes()方法的使用
這篇文章主要介紹了JavaScript中處理時(shí)間之setUTCMinutes()方法的使用,是JavaScript入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06javaScript面向?qū)ο罄^承方法經(jīng)典實(shí)現(xiàn)
很多人都說(shuō)JavaScript不能算是面向?qū)ο蟮淖兂烧Z(yǔ)言。但是JavaScript的類(lèi)型非常松散,也沒(méi)有編譯器,但是我們可以模仿著其他語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮姆绞絹?lái)實(shí)現(xiàn)JavaScript的面向編程2013-08-08辨析JavaScript中的Undefined類(lèi)型與null類(lèi)型
Undefined與null都是js中的基本數(shù)據(jù)類(lèi)型,然而正如它們的名字那樣,未初始化和空并不相同,下面我們就來(lái)詳細(xì)辨析JavaScript中的Undefined類(lèi)型與null類(lèi)型:2016-05-05Javascript學(xué)習(xí)筆記之函數(shù)篇(四):arguments 對(duì)象
JavaScript中arguments函數(shù)對(duì)象是該對(duì)象代表正在執(zhí)行的函數(shù)和調(diào)用它的函數(shù)的參數(shù)。JavaScript 函數(shù)中 arguments 為特殊對(duì)象,無(wú)需明確指出參數(shù)名,就能訪問(wèn)它們。2014-11-11