console.log与JSON.stringify不一致

Pet*_*ris 9 javascript firebug google-chrome-devtools

我有理由相信console.log并且JSON.stringify可以产生相同对象的不一致视图,即使它是以直接的方式创建的(参见注释).

情况

在谷歌浏览器开发者工具和Firebug的,我有一个对象obj,其console.log打印出来{ players: {0: ...}, ...},而JSON.stringify报道{ players: {}, ...}.obj.players{}在这两种功能,所以它似乎console.log是罪魁祸首.它可能在某种程度上是异步/非确定性的吗?

补充说明

我担心我无法提供更多的上下文,因为代码很长而且对于客户来说,但我可以尝试,如果有一些东西可以帮助深究这一点.目前,我被迫远离console.log检查.

知道通过手动设置属性仅仅从对象文字形成对象可能是有用的,例如,obj.players = {}; obj.players[0] = ....

我的意思的样本可以在http://jsfiddle.net/9dcJP/上观察到.

Seb*_*ner 13

你为什么不用它console.dir(obj)呢?或者使用console.log(obj)然后点击输出/展开它?

当我尝试以下代码时:

var obj = {};
obj.players = {};
obj.players[0] = {color: "green"};
obj.players[1] = {color: "blue"};
obj.world = "xyz";
console.log(JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)

我总是(Firefox,Chrome,Opera)得到这个作为输出:

{"players":{"0":{"color":"green"},"1":{"color":"blue"}},"world":"xyz"}
Run Code Online (Sandbox Code Playgroud)

此外,您的players对象看起来实际上是一个数组.所以你应该更好地创建它.

更新: 我刚刚看到你添加了一个JSFIDDLE演示的链接,它players在记录后立即清空对象.据我所知,所有的Web开发工具使用某种异步屏,这会导致一个空players当使用对象console.log(obj)console.dir(obj).因此,Firebug通过正确显示对象来提供最佳效果console.dir(obj).