Почему в JS нельзя присвоить значение отсутствующего свойства объекта, но можно присвоить значение отсутствующего вложенного свойства объекта?

Допустим есть некий объект:
const someObject = { param: 'value' }

Почему код
someObject.another.param = 'value'

Будет ругаться на то, что param не определено, но если определить свойство another:
someObject.another = {}

То ругаться не будет. Ведь в обоих случаях вложенного свойства param нет. Объясните как это работает
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@Nwton
Прежде чем присвоить, компилятор ищет место присвоения.

someObject - знаю где искать (this), нашел
.another - знаю где искать (someObject), не нашел
.param - не знаю где искать, ошибка

someObject - знаю где искать (this), нашел
.another - знаю где искать (someObject), не нашел

Будет ругаться на то, что param не определено
Подозреваю, что компилятор будет ругаться не на то, что param не определен, а на то, что не определен another (undefined).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
yellow79
@yellow79
Senior Software Engineer
в первом варианте вы пытаетесь искать квартиру в несуществующем доме, во втором варианте ищете несуществующую в доме квартиру. как бы первый вариант не имеет смысла, поэтому и ошибка
Ответ написан
@balamyt92
; select * from users; --
А из каких астралов известно что someObject.another должен быть именно объектом, а не допустим массивом?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Biganto Москва
от 130 000 до 130 000 руб.
от 2 500 до 4 000 usd.
HTML Academy Москва
от 85 000 до 100 000 руб.
16 авг. 2018, в 09:18
30000 руб./за проект
16 авг. 2018, в 08:17
600 руб./в час
15 авг. 2018, в 23:38
300 руб./за проект