찾다

 >  Q&A  >  본문

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 = []

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

巴扎黑巴扎黑2895일 전194

모든 응답(1)나는 대답할 것이다

  • PHP中文网

    PHP中文网2017-04-10 17:11:47

    你得不到预期的结果:[[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

    회신하다
    0
  • 취소회신하다