В консоли FF и Chrome {} считается неопределенным до тех пор, пока не будет явно оценено:
{}; // undefined
({}); // ▶ Object
На самом деле он немного менее определен чем undefined -- видимо плохой синтаксис:
{} === undefined; // SyntaxError: Unexpected token ===
{}.constructor; // SyntaxError: Unexpected token .
Но не если на другой стороне, тогда все нормально:
"[object Object]" == {}.toString(); // true
Или если не первое выражение:
undefined + undefined; // NaN
{} + undefined; // NaN
undefined + {}; // "undefined[object Object]"
Что дает?