我想在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)
的值将返回1
和map.get(b)
,2
。
这是所有浏览器都支持的标准行为,还是仅仅是Map集合的Chrome浏览器实现?我可以转发吗?如何在地图中散列函数?
答案 0 :(得分:7)
对象属性名称必须是字符串。如果您尝试将任何其他类型的值用作属性键,则首先将该值转换为字符串。
现在,Map实例是另一回事。根据ES2015规范,地图键可以是任何类型(所以在任何支持Map的环境中都可以依赖它。)
关于函数值如何“散列”,这在规范中没有定义。没有两个函数实例将是相同的,因此即使两个具有完全相同主体的不同函数也将用作不同的Map键。