Javascript中的多变量赋值

Multivariable Assignment in Javascript

本文关键字:变量 赋值 Javascript      更新时间:2023-09-26

有人能解释为什么如果我向foo添加一个属性,那么当我这样做时,bar也会继承该属性吗:

var foo = bar = {};
foo.hi = 'hi';
console.log(bar); //Object {hi: "hi"}

这是怎么回事?我正在设置foo的属性,而不是bar。我意识到我把对象传给了bar,然后又把bar传给了foo,但这里一定遗漏了什么。

整数赋值的工作方式不同,更有意义(对我来说):

var foo = bar = 5;
foo = 4;
console.log(bar); // 5

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

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

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

foo.hi = 'hi';

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

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