2

考慮事項:

A = {};
A.test = 123;
B = A;
C = {};
for (key in A) C[key] = A[key]; // a crude clone.

この例では、BはAへの参照であり、CはAのディープコピーです。

私はそれらをチェックできることを知っていA === BますA === C

しかし、私が持っていない場合、A「A」を知らなくても「B」と「C」を区別できますか?

4

2 に答える 2

8

Javascriptには「実オブジェクト」のようなものはありません。A参考です。

調べB === Cてみると、それらが別々のオブジェクトであることがわかりますが、どちらが「オリジナル」であるかはわかりません。

于 2012-12-22T03:08:51.493 に答える
1

javascriptの変数はオブジェクトではありませんが、オブジェクトへの参照を保持します。javascriptは一連のオブジェクトを含むものと考えることができ、そのオブジェクトを変数に割り当てると、変数に参照が追加されるだけです。したがって、オブジェクトへの参照を保持する最初の変数と、オブジェクトを割り当てた最後の変数の間に違いはありません。

var x = {a: 1};
var y = x;
y.b = 2;

この時点でとの間に違いはありません。どちらにも同じオブジェクトへの参照が含まれていyます。x

あなたがしたように粗いクローンを作るなら、それは完全に異なるオブジェクトであり、オリジナルとのそれ以上のつながりはありません。クローンを変更しても、元のクローンには影響しません。

于 2012-12-22T05:06:23.647 に答える