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
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
console.log()
在某些浏览器(我在Chrome中看到过)有一些有趣的行为,这可能与控制台本身在不同的进程中有关,并且数据必须在后台跨进程边界进行编组(因此它不会与您的Javascript执行同步完成)。
似乎当您执行像console.log(y);
这样的操作,并且y
是一个对象时,立即为控制台存储对y
的引用,稍后获取并显示y
的实际内容。但是,如果在此期间您的Javascript已修改了y
,则您将无法获得确切的y
值在控制台中显示。
您可以通过执行以下操作解决此问题:
console.log(JSON.stringify(y));
实际上,您可以通过将两个console.log()
语句都更改为以下内容来测试您的代码。
使用console.log通过引用将您的对象打印到控制台,您可以将其转换为JSON作为替代方法来记录对象的当前状态。
console.log(JSON.stringify(y));