javascript的数组通常不会预置值。如果你用[]得到一个新数组,它将是空的。如果你访问一个不存在的元素,得到的值则是undefined。如果你知道这个问题,或者你在尝试获取每个元素之前都很有预见性地设置它的值,那就万事大吉了。但是,如果你实现的方法是假设每个元素都从一个已知的值开始(例如0),那么你必须自己准备好这个数组。javascript应该提供一些类似Array.dim这样的方法来做这件事情,但我们可以很容易纠正这个疏忽:
Array.dim = function(dimension, initial){ var a = [],i; for(i = 0;i < dimension;i += 1){ a[i] = initial; } return a; }; //创建一个包含10个0的数组 var myArray = Array.dim(10,0);javascript没有多维数组,但就像大多数类C语言一样,它支持元素为数组的数组:
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。如果你希望它们有不同的初始值,你必须明确地设置它们。同样地,javascript应该对矩阵提供更好的支持。好在我们也可以补上它:
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; } //构造一个用0填充的4*4矩阵 var myMatrix = Array.matrix(4,4,0); myMatrix[3][3] //0 //用来构造一个单位矩阵的方法: Array.identity = function(n){ var i,mat = Array.matrix(n,n,0); for(i = 0;i < n;i += 1){ mat[i][i] = 1; } return mat; }; myMatrix = Array.identity(4); myMatrix[3][3] //1※摘抄自《JavaScript语言精粹(修订版)》