JavaScript:对象变量更改

时间:2015-11-09 03:57:21

标签: javascript

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

控制台上的结果都是一样的。知道为什么吗?

Result for line 2 
Object {a: 200, b: Object} a: 100 b: Object 1: 10 2: 20 
Result for Line 6 
Object {a: 100, b: Object} a: 100 b: Object 1: 10 2: 20

2 个答案:

答案 0 :(得分:3)

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

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

您可以通过以下方式解决此问题:

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

事实上,您可以通过将console.log()语句更改为此来测试代码。

答案 1 :(得分:0)

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

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