{}+[]==0,[]+{}=="[object Object]",!+[]==true (复合语句,隐式类型转换)
这两天看到一些题目,很是不解,主要是js基础还没过关,挑了两个我认为比较难懂的类型转换的题目讲解一下。
对象类型转换这个就不详细说了,网上一大推,无非就是用到两个函数:
- Object.toString()
- 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
,例如:
3、!+[]==true 知道+
会把字符串转换成Number类型,那么这个就好理解了
!+[]
等于:
+[] // ==>0
!0 // ==>true
!+[]+[] 等于:
!+[] // ==> true
true + [] // ==>true+""==>"true"