Javascript通过引用或值传递?

时间:2014-03-04 16:12:49

标签: javascript

我已经多次询问过这个问题,但我有一个具体的例子来澄清。

var a = {animal: 'cat'};

var b = a;

a.animal = 'bear';

在这里,我看到b.animal会给出输出“熊”。这是为什么?如何保留变量b的原始参考“cat”?

3 个答案:

答案 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