0

さて、スタックオーバーフロー、

javascript (NodeJS サーバーでの書き込み) で問題を解決するために何時間も取り組んできましたが、実際にはわかりません。

これが起こることです:

var data = {x: 50};
var temp = data;
temp.x = 100;
console.log(data.x);
//logs 100

この正確なコードをテストしたところ、実際に表示されます100

私の質問:

変数を一時変数に複製し、元の変数を変更せずに一時変数を変更するにはどうすればよいですか。

4

3 に答える 3

4

元のオブジェクトを複製する必要があります。これは、オブジェクトを別の変数に格納しても、前のオブジェクトと同じプロパティを持つ新しいオブジェクトが作成されないためです。同じオブジェクトへの参照を作成するだけです。残念ながら、これを回避する組み込みのソリューションはありませんが、いくつかのソリューションがあります。ここでいくつか思い浮かびます:

var temp = JSON.parse(JSON.stringify(data)); // clones the object using a hack

または:

var temp = {}; // creates a new object and gives it all the same properties as
               // the old one.
for(prop in data) {
    if(data.hasOwnProperty(prop)) {
        temp[prop] = data[prop];
    }
}

自己宣伝ではありませんが、このテーマについてもう少し詳しく説明したブログ記事を書きました。ここで見つけることができます。

于 2012-11-27T23:53:44.543 に答える
3

オブジェクトを変数に割り当てても、オブジェクトのコピーは作成されません。同じオブジェクトへの別の参照を作成するだけです。両方の変数はまったく同じオブジェクトを指し、どちらかのプロパティを変更すると (datatempでは と )、まったく同じオブジェクトが変更されます。

オブジェクトのコピーを作成するには、すべてのプロパティを新しいオブジェクトにコピーして、オブジェクトの明示的なコピーを実際に作成する必要があります。

于 2012-11-27T23:53:53.873 に答える
0

アンダースコア ライブラリのメソッドを使用してclone、オブジェクトを簡単に複製できます。

var temp = _.clone(data);
于 2012-11-28T01:04:11.473 に答える