这段代码:
foo = [{id: 1},{id: 2},{id: 3},{id: 4}, {id: 5}, ]; console.log('foo1', foo, foo.length); foo.splice(2, 1); console.log('foo2', foo, foo.length);
在Chrome中产生以下输出:
foo1 [Object, Object, Object, Object, Object] 5 0: Object 1: Object 2: Object 3: Object length: 4 __proto__: Array[0] 5 (index):23 foo2 [Object, Object, Object, Object] 4 0: Object 1: Object 2: Object 3: Object length: 4 __proto__: Array[0]
这是为什么?
通过检查对象console.log以异步方式进行。控制台同步接收到对对象的引用,但在对象被扩展之前不会显示对象的属性(在某些情况下,取决于浏览器以及日志发生时是否打开了开发工具)。如果在控制台中检查对象之前已对其进行了修改,则显示的数据将具有更新的值。
console.log
例如,Chrome会i在一个方框中显示一点,悬停时说:
i
记录时左边的对象值已被快照,下面的值刚刚被评估。
让您知道您在看什么。
在这些情况下进行记录的一种技巧是记录各个值:
console.log(obj.foo, obj.bar, obj.baz);
或JSON编码对象引用:
console.log(JSON.stringify(obj));