javascript - 关于js中数组在while循环中的结果
本文介绍了javascript - 关于js中数组在while循环中的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
var X = 3,Y = 3,n = 1,result=[],arr=[];
while(Y--){
while(X--){
result[X] = n++;
}
arr[Y] = result;
console.log('内循环跳出:'+ arr[Y]);
console.log('跳出后:'+ arr);
X = 3;
}
console.log(arr);
输出的结果是
内循环跳出:3,2,1
跳出后:,,3,2,1
内循环跳出:6,5,4
跳出后:,6,5,4,6,5,4
内循环跳出:9,8,7
跳出后:9,8,7,9,8,7,9,8,7
[ [ 9, 8, 7 ], [ 9, 8, 7 ], [ 9, 8, 7 ] ]
在跳出后,重置
result = []
能等到预期的结果,这是为什么呢?
解决方案
你得不到预期的结果:[[9, 8, 7], [6, 5, 4], [3, 2, 1]]
原因如下:
result作为一个变量其指向一个数组对象;
arr[Y] = result;语义为将arr数组第(Y+1)个位置指向result变量指向的对象;也就是result和arr[Y]指向了同一个对象,在result没有重新赋值的情况下,arr的各个位置的元素指向和result的指向保持一致
在你result=[]重新赋值后,result变量指向了另一个对象,arr原来指向的对象没有发生变化
和下面的代码同理
var obj1={a:1,b:2};
var obj2=obj1;
obj1.a=99;
console.log(obj1.a,obj1.b);//99,2
console.log(obj2.a,obj2.b);//99,2
obj1={a:2,b:3};
console.log(obj1.a,obj1.b);//2,3
console.log(obj2.a,obj2.b);//99,2
这篇关于javascript - 关于js中数组在while循环中的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文