Почему Firefox рассматривает скобки как блок кода вместо объявления объекта в консоли JavaScript?

Если мы откроем консоль в Firefox и поставим:

{
  test: 'test',
  test: 'testtest'
}

Firefox воспримет это как блок кода, в котором может возникнуть ошибка из-за неожиданного двоеточия. В противоположном Node repl и, например. Chrome интерпретирует это как объявление объекта. Я бы сказал, что это ошибка, но я не знаю, могу ли я сказать, что интерпретировать это как блок кода как-то правильно? Помещение этих объявлений в другие скобки, т.е. ({...}), работает без каких-либо проблем, но все же это вводит в заблуждение, поскольку другие среды узнают, что это объявление объекта


person ThaFog    schedule 04.12.2019    source источник
comment
Это наоборот. Здесь обманывает Chrome — если вы введете {}, он на самом деле вычислит ({}). Если вы оцените ({}) в FF, вы получите тот же результат.   -  person VLAZ    schedule 04.12.2019
comment
так вы имеете в виду, что весь V8 здесь обманывает? То есть, Repl Node.js также рассматривает его как объект   -  person ThaFog    schedule 04.12.2019
comment
Да. Он неявно заключает ваш код в ( и ), что заставит оценивать его как выражение, поэтому { не будет рассматриваться как начало блока кода.   -  person VLAZ    schedule 04.12.2019
comment
Нет обмана. Есть выбор UX. Chrome, Node, Safari выбирают одно, Firefox — другое. Я предпочитаю тот, который выбирают 3 проекта, чем тот, который выбирает 1 проект   -  person gman    schedule 04.12.2019
comment
Грустно, что это никак не обобщается - это неважно, но все же вводит в заблуждение.   -  person ThaFog    schedule 04.12.2019
comment
Хорошо, нашел вопрос, в котором говорится об этом поведении. @gman, все эти трое используют V8 в качестве двигателя, верно? Или я неправильно помню о Сафари. Итак, трое решили использовать двигатель, который сделал выбор за них.   -  person VLAZ    schedule 04.12.2019
comment
Да, спасибо @VLAZ - это объясняет подход Chrome.   -  person ThaFog    schedule 04.12.2019
comment
@VLAZ, Safari не использует V8, он использует JavaScriptCore. Кстати: Edge и IE печатают Expected ';', поэтому у нас есть 3 разных поведения.   -  person gman    schedule 04.12.2019