0

既存のオブジェクトから新しいオブジェクトを作成してから新しい属性を追加すると、なぜ以前の属性が更新されるのですか?

彼らの解決策は私のコードをあまり変更する必要がありませんか?

これが私の例のjsfiddleです。

var data = [
  {
    "id" : 1,
    "name" : "carrot",
    "price" : 0.10,
    "stock" : 12,
    "bgLocation" : "-1px -54px"
  },
  {
    "id" : 2,
    "name" : "fennel",
    "price" : 1.20,
    "stock" : 6,
    "bgLocation" : "-146px -52px"    
  }
]

var item = data[0];
item.added = 4;

//data[0] should not contain the added attribute.
$('body').append(JSON.stringify(data[0]));
4

2 に答える 2

2

変数itemdataは、同じオブジェクトを指す単なる参照です。呼び出すことによって。

var item = data[0];

オブジェクトをコピーするのではなく、 data[0]でアドレス指定されたオブジェクトに新しい参照を作成するだけです。したがって

item.added = 4;

ボット変数が指すオブジェクトを変更します。

ここ

JavaScript オブジェクトを正しく複製するにはどうすればよいですか?

JavaScript でオブジェクトをコピーする方法に関する詳細情報です。

于 2012-09-05T14:18:42.753 に答える
0

取得するのは、コピーではなく、元のオブジェクトへの参照だけだからです。したがって、この参照を更新すると、元のオブジェクトが暗黙的に更新されます。

次を使用して簡単にコピーを作成できます$.extend()

var item = $.extend({}, data[0]);

デモ

于 2012-09-05T14:20:10.880 に答える