Мой код:
var a = "1",
b = "hello",
c = { "100" : "some important data" },
d = {};
d[a]["greeting"] = b;
d[a]["data"] = c;
console.debug (d);
Я получаю следующую ошибку:
Uncaught TypeError: Невозможно установить для свойства "приветствие" значение undefined.
Я пытаюсь сделать что-то похожее на ассоциативный массив. Почему это не работает?
javascript
StackOverflowNewbie
источник
источник
Ответы:
вы никогда не устанавливаете
d[a]
никакого значения.Из-за этого
d[a]
оценивается какundefined
, и вы не можете устанавливать свойстваundefined
.Если вы добавите
d[a] = {}
сразу после,d = {}
все должно работать, как ожидалось.В качестве альтернативы вы можете использовать инициализатор объекта:
Или вы можете установить все свойства
d
в экземпляре анонимной функции:Если вы находитесь в среде, которая поддерживает функции ES2015, вы можете использовать вычисляемые имена свойств :
источник
Вы должны установить
d[a]
либо ассоциативный массив, либо объект:d[a] = [];
d[a] = {};
Без настройки вот что происходит:
d[a] == undefined
, так что вы делаете,undefined['greeting']=b;
и по определению undefined не имеет свойств. Итак, ошибку вы получили.источник
array
илиobject
. JS не имеет ассоциативных массивов, ноObject
может действовать как массив для ограниченного использования.Для объекта, хранящегося в
d[a]
, ничего не установлено. Таким образом,d[a]
оценивается вundefined
. Вы не можете присвоить свойствоundefined
:). Вам необходимо назначить объект или массивd[a]
:источник
d[a] = {};
- использование массивов с нечисловыми клавишами приводит к проблемам в дальнейшем.В javascript почти все является объектом
null
иundefined
исключением.Экземпляры
Array
- это объект. поэтому вы можете установить свойство массива, по той же причине вы не можете установить свойство undefined, потому что это НЕ объектисточник
Я бы просто проверил, существует ли d [a], и если не инициализирую его ...
источник