为什么obj变量的声明必须转移到" //移动到这里"下面的位置正确生成{number:1,color:blue}和{number:2,color:red}对象的数组?当声明停留在下面的当前位置时,数组会产生{number:2,color:red},{number:2,color:red}(即同一个对象,两次)
在当前位置,arrObj数组使用最新的obj值更新,因此输出是一个两次列出的数组"数字:2,颜色:红色"。
当obj声明移动到// MOVE TO HERE下面时,两个对象怎么出现在数组中?如果每次更新obj动态更新数组,为什么arrObj [0]没有被清除,然后在第二次声明obj时用obj的新值更新?
function arrayOfObjects(array) {
var arrObj = [];
var obj = {};
for (i = 0; i < array.length; i++) {
//MOVE TO HERE
for (j = 0; j < array[i].length; j++) {
obj[array[i][j][0]] = array[i][j][1];
}
arrObj[i] = obj;
}
return arrObj;
}
var array = [ [ ['number', '1'], ['color', 'blue'] ] , ['number', '2'], ['color', 'red'] ] ]
arrayOfObjects(array);
答案 0 :(得分:-1)
在JavaScript中,可以通过引用传递对象。在这种情况下,这意味着arrObj和obj引用内存中的同一对象。 因此,当在第二次迭代中,obj已经被变异{number:12,color:red} arrObj [0]和arrObj [1]都引用了同一个对象。 SO discussion