Ответ 1
Когда оператор начинается с {
, он считает, что синтаксический анализатор является началом блока. В случае {}
это пустой оператор блока. Так, как будто вы
{
// no code here
}
|| []
и ||
не может начинать утверждение.
Тот, который работает, [] || {}
[] || {}
, недвусмыслен, потому что оператор, чей первый токен [
может быть только выражением выражения.
Обертка {}
in ( )
означает, что первый токен инструкции равен (
, а не {
. (
Токен не может начинать какую-либо форму выражения, отличную от выражения (хотя он имеет небольшую двусмысленность, поскольку он может запускать анонимный "жир" стрелка ", что все еще выражение и парсер просто должны устранить это позже).
Примечание. Реализация различных сред отладки, таких как консоль вашего браузера и консоль командной строки узла, влияет на этот тип синтаксиса. Чтобы упростить задачу, такие инструменты используют код, который вы вводите, и так или иначе они "обертывают" его, чтобы он мог анализироваться и оцениваться в интерактивном режиме, выставлять оператор по типу. К сожалению, этот процесс может привести к аномалиям, так что что-то, что вы пытаетесь использовать в консоли, может работать нормально, но не при попытке использовать его в реальном блоке кода.