¿Por qué es {} + [] diferente de ({} + [])? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Cuál es la explicación de estos extraños comportamientos de JavaScript mencionados en la charla 'Wat' para CodeMash 2012? 5 respuestas

Hace poco me alarmó descubrir lo siguiente:

> {}+[]
0

> ({}+[])
"[object Object]"

> {}+[]+1
1

> ({}+[])+1
'[object Object]1'

> {}+[] == ({}+[])
false

¿Por qué envolver algo entre paréntesis cambia su tipo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta