使用函数引用作为对象属性/键是安全的
问题描述:
有没有什么原因让我不应该使用函数引用作为对象的属性/键?此代码在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
答
对象键字符串。实际上,x[a]
中使用的是x[a.toString()]
。
这意味着你的关键功能是完全一样的密钥字符串:
x[a] === x["function() { return 'a' }"]
所以,是的,你可能会认为这两个不安全和不合理的。很难想象它会有用或有效的背景。
+0
看到这就是我的想法,关键是字符串,但Chrome的调试器扔掉了我,因为它没有显示关键的引号。 'var x = {'1':'a'}; x;'打印出'Object {1:“a”}'。 –
具有相同主体的两个不同函数将序列化为相同的字符串。这可能不希望。 –
哦,仅供参考,ECMAScript 6将介绍适当的地图:http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets。任何值/对象都可以成为一个关键。 –