Javascript中的多变量赋值

时间:2013-11-25 03:24:42

标签: javascript

有人可以解释为什么如果我向foo添加一个属性,不知何故bar在我这样做时也会继承该属性:

var foo = bar = {};
foo.hi = 'hi';

console.log(bar); //Object {hi: "hi"}

这是如何工作的?我在foo上设置属性,而不是bar。我意识到我将对象传递给bar然后禁止foo,但我必须在这里遗漏一些东西。

整数赋值的工作方式不同而且更有意义(无论如何):

var foo = bar = 5;
foo = 4;

console.log(bar); // 5

2 个答案:

答案 0 :(得分:1)

通过JavaScript引用传递对象。字符串和数字文字不是。在您的代码foo === bar中,是同一个对象。您可以单独声明变量:

// Two different object instances
var foo = {};
var baz = {};

答案 1 :(得分:1)

通过执行foo = bar = {};,foo和bar是指向同一对象的指针。所以当你这样做时:

foo.hi = 'hi';

它还设置bar.hi,因为foobar指向同一个对象。为了使它与众不同,你应该这样做:

var foo = {},  bar = {};
foo.hi = 'hi';