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

Wal*_*osz 0 javascript performance cross-browser

我有什么理由不使用函数引用作为对象的属性/键吗?此代码适用于Chrome,Firefox和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
Run Code Online (Sandbox Code Playgroud)

Den*_*ret 5

对象键是字符串.实际使用的x[a]是什么x[a.toString()].

这意味着您的函数作为键与字符串完全相同:

x[a] === x["function () { return 'a' }"]
Run Code Online (Sandbox Code Playgroud)

所以是的,你可能会认为这既不安全又不合理.很难想象一个有用或有效的环境.