JavaScript:对象变量更改

3
var y = {a:200,b:{}}; 
console.log(y); 
y.a = 100; 
y.b[1] = 10; 
y.b[2] = 20; 
console.log(y); 

控制台上的结果是相同的。有什么想法吗?

第2行的结果
Object {a: 200, b: Object} a: 100 b: Object 1: 10 2: 20 
第6行的结果
Object {a: 100, b: Object} a: 100 b: Object 1: 10 2: 20

3
控制台始终显示对象的当前状态,它不会捕获记录时的状态。在第一个日志后面放置“debugger;”以查看差异。 - Evan Trimboli
2个回答

3

console.log()在某些浏览器(我在Chrome中看到过)有一些有趣的行为,这可能与控制台本身在不同的进程中有关,并且数据必须在后台跨进程边界进行编组(因此它不会与您的Javascript执行同步完成)。

似乎当您执行像console.log(y);这样的操作,并且y是一个对象时,立即为控制台存储对y的引用,稍后获取并显示y的实际内容。但是,如果在此期间您的Javascript已修改了y,则您将无法获得确切的y值在控制台中显示。

您可以通过执行以下操作解决此问题:

console.log(JSON.stringify(y)); 

实际上,您可以通过将两个console.log()语句都更改为以下内容来测试您的代码。


写完这个答案后,我发现有一个重复的问题,并将该问题标记为重复。 - jfriend00

0

使用console.log通过引用将您的对象打印到控制台,您可以将其转换为JSON作为替代方法来记录对象的当前状态。

console.log(JSON.stringify(y));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接