当分配给对象本身时,Javascript obje.key是未定义的

时间:2018-04-08 08:39:15

标签: javascript

我正在查看here

的摘录
var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};

当我记录foo.x时,它表示未定义。 为什么会这样?我预计它会是{n:2}

2 个答案:

答案 0 :(得分:0)

这些值是从左到右分配的,所以这就是:

expected_c

导致foo为foo.x = {n: 2};

然后foo被分配了一个新值

{n: 1, x: {n: 2}}

将其覆盖为foo = {n: 2};

答案 1 :(得分:0)

在两个分配之前评估foo.x的值,因此它引用旧x对象的foo属性。此行为由12.14.4运行时语义定义:评估(ES6latest draft),它告诉我们必须在赋值运算符的右侧(赋值)之前计算赋值运算符(赋值目标)的左侧)。

所以这三个结果相同:

var foo = {n: 1};
var bar = foo;
foo.x = foo = {n: 2};
console.log(foo, bar)

var foo = {n: 1};
var bar = foo;
bar.x = foo = {n: 2};
console.log(foo, bar)

var foo = {n: 1};
var bar = foo;
foo.x = (foo = {n: 2});
console.log(foo, bar)