what caused the difference?
состояние парсер. По умолчанию, анализатор находится в состоянии, в котором он ожидающей заявление. Итак, в вашем примере в консоли, {
выглядит как открытие блока для него, а не начало инициализатора объекта. (Вы также можете дать ему выражение в этой точке, поскольку JavaScript имеет концепцию ExpressionStatement, что утверждение полностью состоящее из выражения.)
Но в вашем var a={}.toString();
коды {}.toString()
появится справа -hand стороне ассистента, где синтаксический анализатор ожидает выражение , а не заявление. Таким образом, {
запускает инициализатор объекта.
Если вы делаете что-то, чтобы сделать парсер ожидать выражение вместо этого, он будет работать в консоли тоже:.
({}).toString(); // "[object Object]"
или
+{}.toString(); // NaN, because the `+` tries to turn `[object Object]` into a number and fails
'({}) ToString()' – Redu