【发布时间】:2014-06-13 14:55:31
【问题描述】:
我有 rootObject 将 childObject 作为一个值。我使用两个 for 循环从 childObject 获取值并将它们放入数组。数组在外循环的每次迭代中被清除。
var childObject = new Object();
for (var i = 0; i < 3; ++i) {
childObject[i] = i*i;
}
var rootObject = new Object();
rootObject[0] = childObject;
我正在使用console.log(resultArray) 来观察数组。这就是我得到的:
在第二个 for 循环之前清除时
var resultArray = []
for ( var rootKey in rootObject){
resultArray.length = 0; //clearing array
for ( var childKey in rootObject[rootKey]){
resultArray.push([ parseInt(childKey), rootObject[rootKey][childKey] ]);
}
console.log(resultArray);
}
我收到[Array[2], Array[2], Array[2]
在第二个 for 循环后清除时
var resultArray = []
for ( var rootKey in rootObject){
for ( var childKey in rootObject[rootKey]){
resultArray.push([ parseInt(childKey), rootObject[rootKey][childKey] ]);
}
console.log(resultArray);
resultArray.length = 0; //clearing array
}
我收到[]
为什么结果不一样?
编辑
我正在使用 Firefox 29
【问题讨论】:
-
这是一个 chrome console.log 的东西。如果你对一个变量有两个赋值,chrome 的 console.log 将只显示后一个。如:var a = 1;控制台.log(a); a = 2; Chrome 会输出 2。
-
这可能是浏览器控制台的问题 - 有些会显示“实时”结果,因为您正在记录对数组的引用(然后立即修改该引用)。尝试改用
console.log(JSON.stringify(resultArray)) -
请注意,手动将这两个操作放在彼此之后会使控制台的行为符合预期:jsfiddle.net/xL6F4
标签: javascript arrays javascript-objects