对象属性的双重赋值会导致未定义的属性

use*_*041 1 javascript assignment-operator

任何人都可以告诉输出如何变成undefined

var foo = {n: 2};
foo.x = foo = {n: 2};
console.log(foo.x); // undefined
Run Code Online (Sandbox Code Playgroud)

Seb*_*mon 7

foo.x = foo = {n:2};
Run Code Online (Sandbox Code Playgroud)

foo.x指财产x,以refered由对象foo.但是,foo = {n:2}指定一个全新的对象foo.x确实已分配给一个对象,但该对象立即被另一个对象替换.具有该x属性的对象不再被任何引用.

您可以将该行读作

foo.x = (foo = {n:2});
Run Code Online (Sandbox Code Playgroud)

图形说明

var foo = {n:2};
Run Code Online (Sandbox Code Playgroud)

第一个对象被分配给foo

foo.x = foo = {n:2};
Run Code Online (Sandbox Code Playgroud)

foo被重新分配给第二个对象,但是foo.x仍然指向第一个对象.

console.log(foo.x);
Run Code Online (Sandbox Code Playgroud)

试图访问foo.x实际上访问第二个对象的x属性.

  • 它们是,但`foo.x` _still_指的是前一个对象. (2认同)