javascript - 为什么这个属性赋值会覆盖 JavaScript 中先前的属性?

标签 javascript

var foo = new Object();
var bar = new Object();
var map = new Object();

map[foo] = "foo";
map[bar] = "bar";

alert(map[foo]);  //This alerts bar, but what happens to foo?

这是帮助您理解如何在 JS 中分配的问题之一。当然,我立即尝试了以下方法:

for(var prop in map){

   console.log(prop + ' ' + map[prop]);

} //[object Object] bar undefined

然后简单地:

map //This returns Object {[object Object]: "bar"}

什么?

更新: 感谢您的回答,但是 foo 发生了什么?是否存在某种我从未听说过的删除机制?

最佳答案

对象括号表示法将其赋予的值强制为字符串。由于您给它一个对象,它会调用该对象的 toString 方法并将 key 保存为 [object Object] 。

Foo 被 bar 覆盖,因为您保存到相同的键,[object Object]

即。你的对象看起来像这样:

{
  "[object Object]": "bar"
}

关于javascript - 为什么这个属性赋值会覆盖 JavaScript 中先前的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877696/

相关文章:

javascript - Lowdb 计算对象数组中的每个字符串

javascript - 可能未处理的 promise 拒绝(id 0)类型错误 GET 或 HEAD 请求不允许主体

javascript - 如何将 Prop (状态和功能)传递给子路由器组件

javascript - 如何将 ic-ajax 与 jsonp 一起使用?

javascript - 如何使svg之外的div不可点击

javascript - React Native - 谷歌演讲

javascript - 如何使用相同的 Restful 后端在两个独立的网络应用程序(javascript)之间进行通信?

javascript - 如何验证是否使用 Selenium 在 javascript 对象上调用了某些方法?

javascript - 理解 Eloquent Javascript 偏函数

Javascript动态下拉菜单我也可以在按钮中看到它