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

标签 javascript assignment-operator

<分区>

谁能说出输出是如何变成undefined的?

var foo = {n: 2};
foo.x = foo = {n: 2};
console.log(foo.x); // undefined

最佳答案

foo.x = foo = { n: 2 };

foo.x 引用了foo 引用的对象的属性x。但是,foo = { n: 2 } 将一个全新的对象分配给 foox 确实分配给了一个对象,但该对象立即被另一个对象替换。具有 x 属性的对象不再被任何东西引用。

你可以把那行读成

foo.x = (foo = { n: 2 });

图解说明

var foo = { n: 2 };

First object is assigned to foo

foo.x = foo = { n: 2 };

foo is reassigned to a second object, but foo.x still points to the first object.

console.log(foo.x);

Trying to access foo.x actually accesses the x property of the second object.

关于javascript - 对象属性的双重赋值导致未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793432/

相关文章:

c++:大对象的过度复制

xquery - 如何在xquery分配中使用if else

C++,有没有办法 (object.method(0,0) = 10) 使用赋值运算符而不是额外的参数?

java - 与赋值运算符相比,使用后修复运算符有哪些优点/限制?

javascript - 如何在无服务器环境中使用密码保护文件 (html)?

javascript - jQuery fadein 效果转移到另一个页面

javascript - 来自全局范围的变量在 javascript 中无法识别

c++ - 在 C++ 中使用赋值运算符重载将类对象的数据复制到另一个类对象时出错

javascript - ES6 将对象数组映射到数组

javascript - Bootstrap 事件按钮状态持续存在