强制类型转换
- 转为String类型,使用toString()函数。
- 转为Number类型,使用Number()函数,parseInt()函数(向下取整数)和parseFloat()函数(向下取浮点数)👈尽量不要使用这种方式取整!
var iNum1 = parseInt("red"); //返回 NaN
var fNum4 = parseFloat("11.22.44"); //返回 11.22
**转Number规则**
1. string '2.3.1' => NaN;
2. null, '', false, [] ==>> 0;
3. undefined => NaN;
4. object => NaN。
- 转boolean类型,使用boolean()函数
转Boolean规则
除了NaN,null,0, ""和undefined以外返回值均为ture,NaN,null,0, ""和undefined的返回值为false。
隐式数据类型转换
隐式类型转换是最为隐蔽的地方,不加注意的话很容易在这一点上出错,对这一点的掌握也体现了JavaScript程序员经验。 JavaScript会自动转换表达式中对象的类型以完成表达式求值。
- 四则运算
加法运算符+是双目运算符,只要其中一个是String类型,表达式的值便是一个String。
对于其他的四则运算,只有其中一个是Number类型,表达式的值便是一个Number。
对于非法字符的情况通常会返回NaN:
1 * ‘a’ // => NaN,这是因为parseInt(a)值为NaN,1 * NaN 还是 NaN - 判断语句
判断语句中的判断条件需要是Boolean类型,所以条件表达式会被隐式转换为Boolean。 其转换规则同Boolean的构造函数。
var obj = {};
if(obj){
while(obj);
}
- Native代码调用
JavaScript宿主环境都会提供大量的对象,它们往往不少通过JavaScript来实现的。 JavaScript给这些函数传入的参数也会进行隐式转换。例如BOM提供的alert方法接受String类型的参数:
alert({a: 1}); // => [object Object]
关于==
- undefined等于null(===时为false)
- 字符串和数字比较时,字符串转数字
- 数字为布尔比较时,布尔转数字
- 字符串和布尔比较时,两者转数字
- 只有一个是对象,则toString() valueOf()
- 两者都是对象,比较地址值
- NaN != NaN