1. [] + []
结果:""
解释:
- ①加号运算符只能使用于原始数据类型,对象相加时需转化为基本类型
- ②对象在转换基本类型时,首先会调用 valueOf 然后调用 toString
- ③[].valueOf()结果为[],转化后不是基本类型,因此继续调用toString(),[].toString()结果为""
- ④2个空字符串相加等于空字符串,"" + "" => ""
2. [] + {}
结果:"[object Object]"
解释:
- ①对象相加时需转化为基本类型
- ②对象在转换基本类型时,首先会调用 valueOf 然后调用 toString
- ③[].toString()结果为"",{}调用toString()结果为"[object Object]"
- ④"" + "[object Object]" => "[object Object]"
3. {} + []
结果:0
解释:
- ①{}在开头被当成代码块忽略
- ②+x,加号在前面跟一个变量,会将变量转化成number型
- ③对象在转换基本类型时,首先会调用 valueOf 然后调用 toString
- ④[].toString()结果为""
- ⑤""转化成number为0,+ "" => 0
4. {} + {}
结果:NaN
解释:
- ①{}在开头被当成代码块忽略
- ②+x,加号在前面跟一个变量,会将变量转化成number型
- ③对象在转换基本类型时,首先会调用 valueOf 然后调用 toString
- ④{}调用toString()结果为"[object Object]"
- ⑤"[object Object]"转化成number为NaN,+ "[object Object]" => NaN
特别注意: {} + {}在不同的浏览器有不同结果,有的浏览器会把{} +{}特殊对待成({}) + {},即首个{}不当成代码块,结果会得到"[object Object][object Object]"