地图如何在 Ecmascript 6 中使用对象键工作

How do Maps work in Ecmascript 6 with Object keys?

本文关键字:对象 工作 Ecmascript 地图      更新时间:2023-09-26

我一直在研究ES6中即将推出的地图数据结构的规范。它应该很棒,因为任何东西都可以是 Map 中的键,而不仅仅是字符串,但是当我尝试使用一些对象示例时,我无法检索我插入到 Map 中的值。

  var _projects = new Map();
  _projects.set({}, [...]);
  _projects.set({page: 2}, [...]);

  _projects.has({page:2})
  false

然后我在Mozilla开发人员网站上看到了这个:

键相等基于"同值"算法:考虑 NaN 与 NaN 相同(即使 NaN !== NaN),所有其他值都是 根据 === 运算符的语义被视为相等。

如果是这种情况,那么如果我想根据对象的值而不是其标识来检索对象的值,我有什么选择?

请记住,{x:5} !== {x:5}是正确的,因为它们是两个不同的对象。

你必须引用它们。

这意味着你不能仅仅因为这是一个新对象而_projects.has({x:5})

您必须执行以下操作:

var _projects = new Map();
var obj = {x:5};
_projects.set(obj, [1,2]);
_projects.has(obj) //true;