Подтвердить что ты не робот

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.

Я пытаюсь сделать что-то похожее на ассоциативный массив. Почему это не работает?

4b9b3361

Ответ 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] = [];
  • 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 объект