1

オブジェクトの一部を更新していますが、更新は正常に機能します。更新関数を呼び出す前にオブジェクトでconsole.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(および場合によってはfirebug)は、オブジェクトを観察するまで、オブジェクトの現在の状態を実際にログに記録しません。次のようにコードにブレークポイントを設定すると、次のようになります。

    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 に答える