Является ли это полностью действительным, чтобы иметь функцию javascript как ключ в объекте?
Является ли это полностью действительным, чтобы иметь функцию javascript как ключ в объекте?
Следующие работы, но я не уверен, что это 100% (ecma или какой-либо орган регулирует это) совместимый
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj[f]);
Ответы
Ответ 1
Для этого нет оснований, поскольку ключи объектов в ECMAscript могут быть только строками (пока что в ECMAscript 262 edition 3 и 5, по спецификации).
Однако в ECMAscript 6 все изменится, где мы будем иметь WeakMaps, а объектные ключи также могут быть объектами (я не уверен в ссылках на функции).
Даже если браузер сейчас может отличить объектные ключи от ссылки на функции, его определенно сомнительное поведение, скорее всего, экспериментальное и не должно использоваться прямо сейчас.
Ответ 2
Похоже, он работает, но он может работать не так, как вы ожидали.
Функция используется для строки при использовании в качестве ключа:
var f = function(a) { return a; };
var obj = {};
obj[f] = 'abc';
console.log(JSON.stringify(obj));
//"{"function (a) { return a; }":"abc"}"
console.log(f.toString());
//"function (a) { return a; }"
var f2 = function (a) { return a; };
console.log(obj[f2]);
//"abc"
Таким образом, функции f и f2 являются разными объектами, но они одинаковы при передаче в строку.
Ответ 3
var f = function(){
};
var obj = {};
obj[f] = "a";
console.log(obj['function (){\r\n\r\n}']);