我已经多次询问过这个问题,但我有一个具体的例子来澄清。
var a = {animal: 'cat'};
var b = a;
a.animal = 'bear';
在这里,我看到b.animal会给出输出“熊”。这是为什么?如何保留变量b的原始参考“cat”?
答案 0 :(得分:2)
是的,both refer to the same object。
可能您感到困惑,因为在Javascript中,您通常不会在内置类型上使用“new”关键字,即使可以。
你也可以这样声明“a”:
var a = new Object();
a.animal = "cat";
现在可能更清楚为什么“b”在“a”改变时会改变。
如果你“b”拥有自己的属性,那么you have to clone "a"。
答案 1 :(得分:1)
您应克隆对象而不是复制引用(b = a);
这是一个很好解释这个问题的问题: How do I correctly clone a JavaScript object?
答案 2 :(得分:1)
'Primitives'被复制,对象不被复制(即复制对它的引用)。
如果您需要保护财产,请通过writeable:false
defineProperty