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

Почему я не могу напрямую получить доступ к объекту литерала объекта?

Почему следующий синтаксис

{a:1,b:2}.constructor

недействителен, тогда как

[1,2].constructor 

действительно?

4b9b3361

Ответ 1

{a:1,b:2}.constructor не является недопустимым синтаксисом, но он неоднозначен, потому что {} обозначает блок или объект? Таким образом, вы должны устранить двусмысленность выражения с помощью круглых скобок, например ({a:1,b:2}).constructor. Теперь JavaScript знает, что вы хотите использовать объект.

Если вы используете этот синтаксис в контексте, где он явно является объектом, то нет никакой двусмысленности:

console.log({a:1,b:2}.constructor) // works fine

Ответ 2

Скобковые скобки в начале строки распознаются как блок кода вместо литерала объекта.

Если вы посмотрите на ошибку в консоли, вы можете увидеть Uncaught SyntaxError: Unexpected token :. Таким образом, ошибка заключается не в вызове свойства конструктора.

Кроме того, когда вы пишете в консоли

{a:1}

JS интерпретирует это как блок с label, а не объект с свойством a.