讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議53:小心使用數組維度 >

建議53:小心使用數組維度

在JavaScript中,數組在默認狀態下是不會初始化的。如果使用運算符創建一個新數組,那麼此數組將是空的。如果訪問的是數組中不存在的元素,則得到的值將是undefined。因此,在JavaScript程序設計中應該時刻考慮這個問題:在嘗試讀取每個元素之前,都應該預先設置它的值。但是,如果在設計中假設每個元素都從一個已知的值開始(如0),那麼就必須預定義這個數組。我們也可以為JavaScript自定義一個靜態函數:


Array.dim=function(dimension,initial){

var a=,i;

for(i=0;i<dimension;i+=1){

a[i]=initial;

}

return a;

};


借助這個工具函數,可以輕鬆地創建一個初始化數組。例如,創建一個包含100個0的數組:


var myArray=Array.dim(100,0);


JavaScript沒有多維數組,但是它支持元素為數組的數組。


var matrix=[

[0,1,2],

[3,4,5],

[6,7,8]

];

matrix[2][1]//7


為了自動化創建一個二維數組或一個元素為數組的數組,我們不妨這樣做:


for(i=0;i<n;i+=1){

my_array[i]=;

}


注意,Array.dim(n,)在這裡不能工作,如果使用它,每個元素都指向同一個數組的引用,那是非常糟糕的。

一個空矩陣的每個單元將擁有一個初始值undefined。如果希望它們有不同的初始值,必須明確地設置它們的值。因此,我們可以單獨為Array定義一個矩陣數組定義函數。


Array.matrix=function(m,n,initial){

var a,i,j,mat=;

for(i=0;i<m;i+=1){

a=;

for(j=0;j<n;j+=1){

a[j]=initial;

}

mat[i]=a;

}

return mat;

};


下面就利用這個矩陣數組定義函數構建一個5×5的矩陣數組,且每個元素的初始值為0。


var myMatrix=Array.matrix(5,5,0);

document.writeln(myMatrix[2][4]);//0