x = 1 + {}
"1[object Object]"
x = {} + 1
"[object Object]1" // 可见以上两句的运算结果x并步离奇
1 + {} // 因为 + 在前,{} 被当成运算符,它的值是【object,object】字符串,所以整个运算会自动类型转换
"1[object Object]"
{} + 1 // {} 在前,整个语句并没有被解析成一个运算表达式,而是 {} 被单独解析,真正的语句的值就成了 +1
1
{foo: 'bar'} + 1 // 一样的道理
1
({}) + 1 // 小括号去处了二意性
"[object Object]1"