这两天看到一些题目,很是不解,主要是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"
本文探讨JavaScript中的一些复杂类型转换问题,如`[]+{}=="[object Object]"`,`{}+[] == 0`以及`!+[]==true`。通过解析这些表达式的运算过程,揭示JS中复合语句的运算规则和隐式类型转换的原理。重点讨论了对象到字符串的转换以及在复合语句中的类型转换行为。
&spm=1001.2101.3001.5002&articleId=84236538&d=1&t=3&u=10b54e239d594f08907a74a37cec72ac)
1967

被折叠的 条评论
为什么被折叠?



