Javascript: способы создания объекта в объекте

309
03 мая 2017, 11:20

Здравствуйте!

Подскажите, пожалуйста, почему не удается добавить объект в объект если исходный пустой?

Например:

 obj = {};
 obj['options']['test2'] = 2;  // ошибка Cannot set property 'test2' of undefined

Однако, если перед этим создать объект с помощью присвоения:

 obj = {};
 obj['options'] = {test1:1};
 obj['options']['test2'] = 2;  //ошибки уже не возникает

Подскажите, пожалуйста, оптимальные способы создания объекта в объекте. Спасибо!

Answer 1

Ошибка возникает потому что данного объекта нету, следовательно подобное выражение вернёт undefined без предыдущего присваивания данного параметра.

return typeof options ["name"];

Для корректной работы нужно сначала создать объект, а уже только потом работать с его параметрами.

options ["name"] ["parameter"] = typeof value; // так работать не будет
options ["name"] = {}; // а так все будет работать
options ["name"] ["parameter"] = typeof value; 
Answer 2
obj['options']['test2'] = 2;  // ошибка Cannot set property 'test2' of undefined  

Текст ошибки прямо описывает проблему: obj.options на момент присваивания не определён.

Одним из решений может быть предварительная проверка:

if (typeof obj.options === 'undefined') obj.options = {};
obj.options.test2 = 2;
READ ALSO
Найти значения в подмассиве

Найти значения в подмассиве

Есть массив section = [[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]]; И массив numbers = [2,3,5,8,10,14,15];

413
Не могу понять кусок кода

Не могу понять кусок кода

Решил разобрать маленький фреймворк Sortable (для сортировки элементов на странице) и не могу понять небольшой кусок кода

406
БЭМ Не актуальная документация

БЭМ Не актуальная документация

Документация по синтаксису шаблонов, шаблонизатора bem-xjst, предикатыК первому подпредикату показан и объяснен пример, который не работает

276