考虑到:
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”吗?
答案 0 :(得分:8)
Javascript中没有“真实对象”这样的东西。 A 也是参考。
如果您检查B === C
,您将能够发现它们是单独的对象,但您无法分辨哪一个是“原始”。
答案 1 :(得分:1)
javascript中的变量永远不是一个对象,但保存对象的引用。您可以将javascript视为包含一堆对象,并且该对象对变量的任何赋值只是将引用放入变量中。因此,保持对象引用的第一个变量与您为其分配的最后一个变量之间没有区别。
var x = {a: 1};
var y = x;
y.b = 2;
此时y
和x
之间没有区别 - 它们都包含对同一对象的引用。
如果你像你那样制作一个粗糙的克隆,那么它是一个完全不同的对象,没有与原始的进一步连接。对克隆的更改不会影响原始文件。