Почему я не могу напрямую получить доступ к объекту литерала объекта?
Почему следующий синтаксис
{a:1,b:2}.constructor
недействителен, тогда как
[1,2].constructor
действительно?
Ответ 1
{a:1,b:2}.constructor не является недопустимым синтаксисом, но он неоднозначен, потому что {} обозначает блок или объект? Таким образом, вы должны устранить двусмысленность выражения с помощью круглых скобок, например ({a:1,b:2}).constructor. Теперь JavaScript знает, что вы хотите использовать объект.
Если вы используете этот синтаксис в контексте, где он явно является объектом, то нет никакой двусмысленности:
Если вы посмотрите на ошибку в консоли, вы можете увидеть Uncaught SyntaxError: Unexpected token :. Таким образом, ошибка заключается не в вызове свойства конструктора.
Кроме того, когда вы пишете в консоли
{a:1}
JS интерпретирует это как блок с label, а не объект с свойством a.