今天用javascript寫一個小程序,用到數組時有一個小小發現,翻了手邊的書都沒有介紹,所以就發過來獻丑了。
首先我們先定義一個數組,並給它賦值,然後再定義一個空的數組,另空數組=原數組:
/*****************代碼段一*****************
var array1 = new Array("a", "b", "c");
var array2 = new Array();
Array2 = Array1;
/******************************************
我當時的目的是想用新數組暫時存放原數組的數據,因為我可能改變這些數據這些數據,但是又不想改變原數組,所以我用一個新的臨時數組來存放這些數據。但是運行的結果卻是我操作了新數組,原數的值也改變了。
/*****************代碼段二*****************
array2.pop();
array2.push("d");
var tempStr = "";
for (var i=0; i<=array1.length; i++)
tempStr += array1[i];
alert(tempStr);
/******************************************
這讓我想起了C/C++裡面引用或者指針,可是我翻遍了手邊的各種javascript手冊或者教程都沒有提到這一概念,但這裡新數組確實是原數組的一個引用。而用其他方法來初始化這個新數組就不會出現這樣的情況:
/****************代碼段三******************
var array1 = new Array("a", "b", "c");
var array2 = new Array(array1);
/******************************************
一些思考:win下javascript的數組對象應該是vc++寫的class,而作者沒有重載"=",所以使javascript的數組直接用"="賦值成為了對源數組的引用。