题目
js如果执行以下两个条语句:
[] + {}
{} + []
结果会是什么,为什么?
结果
[] + {} // '[object Object]'
{} + [] // 0
[] + {} 在执行 + 运算时,[] 和 {} 都不是数字、字符串这种原始类型的值,他们自身会先执行.valueOf()方法,如果.valueOf()返回的仍然不是原始类型的值,就会再次执行.toString()方法,最终得到原始类型的值,如果还得不到就会报错。
经过这两个方法的调用后,[]得到了一个 ‘’ 空字符串,{}得到了一个 ‘[object Object]’ 这样的字符串,所以经过拼接后,最终结果就是’[object Object]’
{} + [] 只是调换了下顺序,为什么结果却是0呢,因为开头的 {} ,被js误认为是代码片段的花括号,而不是对象的花括号,所以 {} + []实际执行的是 +[],所以经过转换结果就是0了。如果要得到相同的结果,只需要将这条语句放在括号内,作为表达式执行,({} + []),js就会认为{} 是对象了,结果也是’[object Object]’