Почему `{} + 1` получает номер 1 в Chrome и Firefox, но строка ‘ 1’ в Node.js?

Добавление в Javascript действительно потрясающее.
В Chrome и Firefox {} + 1 равно числу 1; но в Node.js, {} + 1 равно string ‘[object Object] 1’. С другой стороны, 1 + {} равен ‘1 [object Object]’ в обоих браузерах и Node.js.
Кто может объяснить, почему {} + 1 равно 1 в браузерах?

Это немного сложно. Это происходит, потому что большинство движков JavaScript интерпретируют {} как кодовый блок, а не объект. Таким образом, {}+1 по существу совпадает с +1 . Если вы это сделаете (например)

 ({}+1}) 

то код внутри скобок () будет интерпретироваться как выражение, а не блок кода. Таким образом, {} становится фактическим объектом.

Прочтите это для более подробной информации:

http://www.2ality.com/2012/01/object-plus-object.html

В статье также объясняется, почему в Node.Js.