[] + [],[] + {},{} + {},{} + []的值以及原理

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]"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容