更新对象的一部分有效,但在更新之前它也会更新

时间:2012-07-05 12:40:45

标签: javascript

我正在更新一个对象的一部分并且更新工作正常。当我在调用更新函数之前在对象上执行了console.log时,n对象已经更新。我本来希望看到旧版本对象,我知道我做的事情真的很傻。我只是想明白为什么会这样。这就是我的代码

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);

2 个答案:

答案 0 :(得分:3)

Chrome(可能还有firebug)实际上并不记录对象的当前状态,直到您观察它为止。如果你在代码中设置一个断点,那么:

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

    updateObject(upObject);

    console.log(obj);

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

答案 1 :(得分:2)

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

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