是javascript地图集合的函数有效键吗?

时间:2016-08-18 20:28:18

标签: javascript

我想在JavaScript中使用函数作为键。 我知道对于js对象,函数被转换为" toString"形成。 如果两个函数具有相同的主体,则这是一个问题。

var a = function() {};
var b = function() {};
var obj={};
obj[a] = 1;
obj[b] = 2;

obj[a]的值将包含2

如果我使用Map,它似乎工作正常。

var a = function() {};
var b = function() {};
var map = new Map();
map.set(a, 1);
map.set(b, 2);

map.get(a)的值将返回1map.get(b)2

这是所有浏览器都支持的标准行为,还是仅仅是Map集合的Chrome浏览器实现?我可以转发吗?如何在地图中散列函数?

1 个答案:

答案 0 :(得分:7)

对象属性名称必须是字符串。如果您尝试将任何其他类型的值用作属性键,则首先将该值转换为字符串。

现在,Map实例是另一回事。根据ES2015规范,地图键可以是任何类型(所以在任何支持Map的环境中都可以依赖它。)

关于函数值如何“散列”,这在规范中没有定义。没有两个函数实例将是相同的,因此即使两个具有完全相同主体的不同函数也将用作不同的Map键。