首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议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