Ответ 1
Нет, это невозможно в JavaScript. Кстати, вы, конечно, имели в виду объекты (свойства-значения-карты) вместо массивов. Два решения:
-
Внесите свой объект в
Proxy
, который предназначен для того, чтобы делать именно то, что вы хотите. Тем не менее, это только черновик и в настоящее время только поддерживается в Firefox Javascript 1.8.5. -
Используйте функцию getter с параметром string вместо свойств объекта. Эта функция может искать ключ ввода во внутреннем "словарном" объекте и обрабатывать промахи программно - например, создание значений динамически или возврат значений по умолчанию.
Конечно, вы можете построить factory для таких функций getter.
function defaultDict(map, default) {
return function(key) {
if (key in map)
return map[key];
if (typeof default == "function")
return default(key);
return default;
};
}
var a = defaultDict({cat: 1}, 0);
console.log(a('cat')); // 1
console.log(a('dog')); // 0