Javascript 为什么数组中的多重赋值是这样的?
我用这个方法创建了一个带有初始值设定项的一维数组,当我用这个方法创建多维数组时,我给这个多维数组分配了一个元素,如图所示,我把这个元素分配给数组的每个元素,这是怎么发生的Javascript 为什么数组中的多重赋值是这样的?,javascript,arrays,Javascript,Arrays,我用这个方法创建了一个带有初始值设定项的一维数组,当我用这个方法创建多维数组时,我给这个多维数组分配了一个元素,如图所示,我把这个元素分配给数组的每个元素,这是怎么发生的 Array.dim=function(dimensions,init){ var a=[],i; for(i=0;i<dimensions;i++){ a[i]=init; } return a;} var p=Array.dim(20,0
Array.dim=function(dimensions,init){
var a=[],i;
for(i=0;i<dimensions;i++){
a[i]=init;
}
return a;}
var p=Array.dim(20,0);
p
(20) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var p=Array.dim(10,[]);
p[0][0]=0;
(10) [Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1)]
0: [0]
1: [0]
2: [0]
3: [0]
4: [0]
5: [0]
6: [0]
7: [0]
8: [0]
9: [0]
length: 10
__proto__: Array(0)
Array.dim=函数(维度,初始){
var a=[],i;
对于(i=0;i您移交了一个数组引用,并且每个项都对给定数组共享相同的对象引用
您可以使用一个函数,为每个调用返回一个新数组
Array.dim=函数(维度,初始){
变量a=[],
我
对于(i=0;i[]);
q[0][0]=0;
控制台日志(p);
console.log(q);
因为a[i]
总是指向init
。数组中填充了对空数组的相同引用,因此p中的所有数组元素都指向相同的数组引用,因此每个项都显示相同的引用,即成为[0]。简言之,p[0][0]与点[0][1]相同依此类推,因为两者都指向init
。