为什么 console.log 甚至在修改之前就输出修改后的值?
Why does console.log output modified values even before they have been modified?
在Chrome39开发者工具中,这段代码:
var something = [
{x: 'foo'},
{x: 'foo'}
];
console.log(something);
something.forEach(function (element) {
element['x'] = 'baz';
});
...输出:
为什么 console.log
甚至在修改之前就输出修改后的值?
类似question from 2012 explains that due to a chromium bug、console.log
的是"delayed"(不立即将输入对象字符串化)。但是这个错误被标记为已修复,为什么几年后仍然出现这种情况?
每当您单击对象数组时,它都会向您显示更新后的对象,而不是您执行 console.log 时对象外观的快照。
将其视为对相应对象的引用数组。
没有。
用console.log
输出对象时,输出"by reference"对象;控制台中的值是动态的,它们会更新以反映对象的当前状态。
如果要输出有关对象的静态文本字符串,请使用console.dir
在Chrome39开发者工具中,这段代码:
var something = [
{x: 'foo'},
{x: 'foo'}
];
console.log(something);
something.forEach(function (element) {
element['x'] = 'baz';
});
...输出:
为什么 console.log
甚至在修改之前就输出修改后的值?
类似question from 2012 explains that due to a chromium bug、console.log
的是"delayed"(不立即将输入对象字符串化)。但是这个错误被标记为已修复,为什么几年后仍然出现这种情况?
每当您单击对象数组时,它都会向您显示更新后的对象,而不是您执行 console.log 时对象外观的快照。
将其视为对相应对象的引用数组。
没有。
用console.log
输出对象时,输出"by reference"对象;控制台中的值是动态的,它们会更新以反映对象的当前状态。
如果要输出有关对象的静态文本字符串,请使用console.dir