如果(A)是循环中创建的实际对象,为什么(B)包含3个对象,我会混淆Google Chrome开发人员工具控制台的显示方式?
是否意味着(A)将包含3个对象?
演示:Formset
var test={}
for(var i=0;i<3;i++){
test[i]={}
test[i].y="111"
console.log("test",test)
}
答案 0 :(得分:5)
你误解了控制台输出。它正确且正如预期的那样显示了循环内对象的内容增加,因此输出中有1,2和3个成员。然而,最后变量'test'是完全填充的对象,当你展开第一行时,它显示扩展时的内容 。是一个有3个孩子的完全填充的物体。
您的困惑源于日志记录在记录时不存储对象状态的事实。
答案 1 :(得分:1)
Chrome控制台会在控制台中显示最终对象。它显示了通过对象的任何值。因此,首先在控制台中它将显示
test Object {0: Object}
但是当你扩展时,它将有三个已经通过它的对象。
test Object {0: Object}0: Object1: Object2: Object__proto__: Object
需要注意的是,在循环的第一次迭代中,您可能会在控制台中看到三个对象,但只有一个对象,即
test Object {0: Object}
实际上是可访问的。如果要在每次迭代中检查对象的实际状态,则必须像下面那样克隆它
var newObject = jQuery.extend(true, {}, test);
这是一个小提琴,可以让你了解我的观点https://jsfiddle.net/qtdurtzc/