在对象中创建对象

时间:2015-09-25 05:27:34

标签: javascript

如果(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)
}

https://jsfiddle.net/LygmkgLm/

2 个答案:

答案 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/