Почему "{} == false" неправильный синтаксис javascript, тогда как "false == {}" нет?

Вот результат из консоли браузера (как firefox, так и chrome), false == {} работает, но {} == false дает синтаксическую ошибку.

>> false == []
true
>> false == {}
false
>> 0 == false
true
>> false == []
true
>> false == {}
false
>> [] == false
true
>> {} == false
Uncaught SyntaxError: Unexpected token == 

Ответ 1

В первом случае для анализатора не ясно, что {} представляет значение.

Следующие работы:

var a = {};
a == false      // false

Или, альтернативно, вы можете использовать:

({}) == false   // false

Таким образом, это не что-то конкретное для сравнения значений - скорее, это способ анализа кода.

Хороший вопрос!

Ответ 2

Если вы запустите только {}, вы увидите, что он не анализируется как объект вообще - он дает undefined! Очевидно, что он анализируется как кодовый блок. Следовательно, {} == false является синтаксической ошибкой, так как в левой части == ничего нет.

{}variableName также не является синтаксической ошибкой по той же причине - это пустой блок кода.

Если вы заключите его в круглые скобки, он правильно разобран как литерал объекта и работает.

({}) == false

Ответ 3

Даже это работает,

 /{}/ == false;   // false