有人可以解释为什么如果我向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
答案 0 :(得分:1)
通过JavaScript引用传递对象。字符串和数字文字不是。在您的代码foo === bar
中,是同一个对象。您可以单独声明变量:
// Two different object instances
var foo = {};
var baz = {};
答案 1 :(得分:1)
通过执行foo = bar = {};
,foo和bar是指向同一对象的指针。所以当你这样做时:
foo.hi = 'hi';
它还设置bar.hi
,因为foo
和bar
指向同一个对象。为了使它与众不同,你应该这样做:
var foo = {}, bar = {};
foo.hi = 'hi';