1.a + number类型,a是字符,把number变成字符再相加;
a不是, 把a变成number再相加。
常见调用Number()的隐式类型转换有++ / --(+ / - 一元运算符)、- * / %;调用Boolean的有! ;
==要把左右两边转换为同一数据类型再比较,===和!==不发生类型转换。
eg: (1)var str = false + 1;
document.write(str);
false不是字符,Number(false)=0, 0+1=1,所以str=1。
(2)if(11 + '11'*2 == 33){
document.write('基础扎实');
}
*优先级大于+,’11’*2 <==> Number(‘11’)*2<==>11*2=22,所以11+’11’*2 = 33, 表达式返回true,
执行if里面的操作。
(3)!!' ' + !!'' - !!false || document.write('绕不绕,哈哈哈');
!操作调用隐式类型转换Boolean,字符串是空返回false,否则返回true,所以||左边即true + false - false,
即true,||遇到真就停,不看后面,所以不执行document。
(4)if(typeof(a) && -true + (+undefined) + ''){
document.write('基础扎实');
}这里a未定义,所以typeof(a)返回字符串’undefined’,Boolean(’undefined’)返回true。
右边是-1 + NaN + ''即字符串’-1NaN ’Boolean()为true,所以&&返回true,执行if里面的操作。