JavaScript - невозможно установить свойство undefined
Мой код:
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.
Я пытаюсь сделать что-то похожее на ассоциативный массив. Почему это не работает?
Ответы
Ответ 1
вы никогда не устанавливаете d[a]
на любое значение.
Из-за этого d[a]
оценивает undefined
, и вы не можете установить свойства на undefined
.
Если вы добавите d[a] = {}
сразу после d = {}
, все должно работать как ожидалось.
В качестве альтернативы вы можете использовать инициализатор объекта:
d[a] = {
greetings: b,
data: c
};
Или вы можете установить все свойства d
в экземпляре анонимной функции:
d = new function () {
this[a] = {
greetings: b,
data: c
};
};
Если вы находитесь в среде, поддерживающей функции ES2015, вы можете использовать имена вычисленных свойств:
d = {
[a]: {
greetings: b,
data: c
}
};
Ответ 2
Вы должны установить d[a]
либо ассоциативный массив, либо объект:
Без настройки, это то, что происходит:
d[a] == undefined
, так что вы делаете undefined['greeting']=b;
и по определению undefined не имеет свойств. Таким образом, полученная вами ошибка.
Ответ 3
Объект, хранящийся в d[a]
, не настроен ни на что. Таким образом, d[a]
оценивается как undefined
. Вы не можете назначить свойство undefined
:). Вам нужно назначить объект или массив d[a]
:
d[a] = [];
d[a]["greeting"] = b;
console.debug(d);
Ответ 4
В javascript почти все объекты, null
и undefined
являются исключением.
Экземпляры Array
- это объект. поэтому вы можете установить свойство массива, по той же причине вы не можете установить свойство undefined, потому что его NOT объект