使用函数引用作为对象属性/键是安全的

问题描述:

有没有什么原因让我不应该使用函数引用作为对象的属性/键?此代码在Chrome,火狐,& IE8,但“只是因为一些工作......”使用函数引用作为对象属性/键是安全的

var x = {} 

var a = function() { return 'a' }; 
var b = function() { return 'b' }; 

x[a] = 1 
x[b] = 2 

x[a] === x[a] // returns true 
x[a] === x[b] // returns false 
x[b] === x[b] // returns true 
x[a] // returns 1 
x[b] // returns 2 
+0

具有相同主体的两个不同函数将序列化为相同的字符串。这可能不希望。 –

+0

哦,仅供参考,ECMAScript 6将介绍适当的地图:http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets。任何值/对象都可以成为一个关键。 –

对象键字符串。实际上,x[a]中使用的是x[a.toString()]

这意味着你的关键功能是完全一样的密钥字符串:

x[a] === x["function() { return 'a' }"] 

所以,是的,你可能会认为这两个不安全和不合理的。很难想象它会有用或有效的背景。

+0

看到这就是我的想法,关键是字符串,但Chrome的调试器扔掉了我,因为它没有显示关键的引号。 'var x = {'1':'a'}; x;'打印出'Object {1:“a”}'。 –