Автоматически инициализировать объекты в js

Я сталкиваюсь со следующей ошибкой в ​​js

Cannot read property 'charlie' of undefined 

Я устанавливаю такое значение

alpha.beta.charlie.delta.echo = [];

но только альфа и бета инициализируются как объекты. Итак, как мне автоматически инициализировать объекты charlie и echo как объекты без записи

alpha.beta.charlie = {};
alpha.beta.charlie.delta = {}
alpha.beta.charlie.delta.echo = [];

person Tim Joyce    schedule 04.09.2013    source источник
comment
Дублировать? stackoverflow.com/questions/5484673/   -  person Holf    schedule 04.09.2013
comment
beta, кажется, еще не инициализирован, когда в сообщении об ошибке говорится, что вы обращаетесь к charlie на undefined   -  person Bergi    schedule 04.09.2013
comment
Согласен с @Bergi Ошибка Невозможно прочитать свойство 'charlie' из undefined указывает на то, что бета не определена, поэтому на данный момент определена только альфа   -  person Robert    schedule 04.09.2013


Ответы (4)


Вы не делаете - лучшее, что вы можете сделать, это что-то вроде этого:

alpha.beta = { charlie: { delta: { echo: [] } } };

Если вы не знаете, инициализированы ли объекты еще или нет, было бы безопаснее сохранить первую форму и сделать что-то вроде этого:

alpha.beta                    = alpha.beta || {};
alpha.beta.charlie            = alpha.beta.charlie || {};
alpha.beta.charlie.delta      = alpha.beta.charlie.delta || {}
alpha.beta.charlie.delta.echo = alpha.beta.charlie.delta.echo  || [];
person dc5    schedule 04.09.2013

Придется все инициировать..

alpha={beta:{charlie:{delta:[]}};

тогда alpha.beta.charlie.delta будет вашим пустым массивом [];

person Robert    schedule 04.09.2013
comment
Пожалуйста, не используйте == таким образом в коде (ваше выражение даст false). Сделайте это хотя бы комментарием или используйте символ, например ≙ - person Bergi; 04.09.2013

В какой-то момент вам нужно объявить alpha свойства, более короткая версия этого:

alpha.beta.charlie = {
  delta: {
    echo: []
  }
}
person Alberto Zaccagni    schedule 04.09.2013

В javascript невозможна автоинициализация (если только не из-за уродливых хаков с прокси или со знанием имен свойств ранее).

Вместо этого просто вложите литералы объектов, чтобы создать свойства непосредственно на них, вместо создания пустых объектов и последующего добавления к ним свойств:

alpha.beta = {
    charlie = {
        delta: {
            echo: []
        }
    }
};

или короткий

alpha.beta = {charlie: {delta: {echo: []}}};
person Bergi    schedule 04.09.2013