javascript - 关于js中数组在while循环中的结果
巴扎黑
巴扎黑 2017-04-10 17:09:47
0
1
201
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 = []

能等到预期的结果,这是为什么呢?

巴扎黑
巴扎黑

全部回覆(1)
洪涛

你得不到预期的结果:[[9, 8, 7], [6, 5, 4], [3, 2, 1]]
原因如下:

  1. result作为一个变量其指向一个数组对象;

  2. arr[Y] = result;语义为将arr数组第(Y+1)个位置指向result变量指向的对象;也就是result和arr[Y]指向了同一个对象,在result没有重新赋值的情况下,arr的各个位置的元素指向和result的指向保持一致

  3. 在你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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板