Почему "{} == 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