javascript - 关于js中数组在while循环中的结果

查看:76
本文介绍了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]]
原因如下:

  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

这篇关于javascript - 关于js中数组在while循环中的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆