1

我正在更新对象的一部分并且更新工作正常。当我在调用更新功能之前对对象执行控制台.log 时,对象已经更新。我期待看到对象的旧副本,我知道我在做一些非常愚蠢的事情。我只是想了解为什么会这样。这是我的代码

function updateObject(o){
            o.a='oneHundred';
            o.b='twoHundred'
        }

        var obj={
            a : 'one',
            b : 'two',
            c : {
                    a : '',
                    b : ''
                }
        }

        console.log(obj);//outputs the updated object before I call updateObject()

        var upObject = obj.c ;

        updateObject(upObject);

        console.log(obj);
4

2 回答 2

3

Chrome(可能还有萤火虫)在您观察对象之前实际上不会记录对象的当前状态。如果你像这样在代码中设置断点:

    console.log(obj);//outputs the updated object before I call updateObject()
    debugger; // force breakpoint
    var upObject = obj.c ;

    updateObject(upObject);

    console.log(obj);

然后展开对象你会看到它是未更新的版本。您最好尽可能记录您想要查看的特定属性,而不是整个对象。

于 2012-07-05T12:43:21.407 回答
2

Chrome 将在控制台中显示对象本身,而不是该时间点的对象表示。您可以调用stringify以获取快照并记录它,以便在您更改对象时它不会更改。

console.log(JSON.stringify(obj));
于 2012-07-05T12:48:22.950 回答