{}+[]==0,[]+{}=="[object Object]",!+[]==true (复合语句,隐式类型转换)

这两天看到一些题目,很是不解,主要是js基础还没过关,挑了两个我认为比较难懂的类型转换的题目讲解一下。
对象类型转换这个就不详细说了,网上一大推,无非就是用到两个函数:

  1. Object.toString()
  2. Object.valueof()

这里说一下,Number,String,Boolean在调用方法的时候也会转换成包装对象。

1、[]+{}=="[object Object]",这个简单

[]+{} //输出"[object Object]"
[].toString() //==> ""
{}.toString() // ==> "[object Object]"
""+"[object Object]" // ==>"[object Object]"

2、{}+[] == 0;这个就有点不解了,其实这个就要说到js的复合语句了,js中{}代表复合语句:

{
    var a = 1;
    a = a+1;
}

这个是一个代码块,也叫复合语句,所以{}+[]其实是这样运算的:

{};
+[]   //   [].toString()  ==>""  (+"") ==>0

这里+[]是一个类型转换,js中+-开头的的变量会被转换成Number类型,不是number类型的会转成NaN,例如:{}+[]==0,[]+{}=="[object Object]",!+[]==true (复合语句,隐式类型转换)

3、!+[]==true 知道+会把字符串转换成Number类型,那么这个就好理解了

{}+[]==0,[]+{}=="[object Object]",!+[]==true (复合语句,隐式类型转换)

!+[]
等于:
+[] //  ==>0
!0 // ==>true
!+[]+[] 等于:
!+[] //   ==> true
true + [] // ==>true+""==>"true"