18

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

私はこのコードを持っています:

var temp = [];
var obj = {name:"1"};
temp.push(obj);
obj.name = "2";
temp.push(obj);

私が期待していることは真実です:

temp[0].name == "1" && temp[1].name == "2";

実際に何が起こるか:

temp[0].name == "2" && temp[1].name == "2";

なぜこれが起こるのか、どうすれば私が期待しているものを得ることができますか?

4

3 に答える 3

9

JavaScript 配列は、オブジェクト自体ではなく、オブジェクトへの参照を保持します。オブジェクトを配列にプッシュすると、新しいオブジェクトは作成されませんが、オブジェクトへの参照がobj配列に配置されます。

したがって、最終的に obj、temp[0]、および temp 1はすべて同じオブジェクトを指します。実際にまったく新しいオブジェクトを作成するには、Object.create()または jQuery.extend({},obj) を使用できます。あなたの場合、を使用して新しい単純なオブジェクトを作成するだけで十分簡単ですvar newobj = {name="2"}

于 2013-01-23T21:46:29.327 に答える
4

JavaScript オブジェクトは参照によって渡されます。あなたの場合、「obj」というオブジェクトは 1 つしかなく、temp[0] と temp[1] は同じオブジェクトを指しています。

于 2013-01-23T21:42:19.047 に答える
0

objオブジェクトであることは参照によって配列に追加されるため、実際には同じものobjを2回追加します。

于 2013-01-23T21:44:31.357 に答える