一、显式类型转换(强制类型转换):Number()、parseInt()、parseFloat()等
1.Number():Number()方法能将看起来像数字的字符串变成数字,将true转换为1,false转换为0;尽可能地转换。当遇到函数时,Number()方法无法对其转换,将输出NaN。
var a='100';
alert(a+100);//输出 100100
alert(Number(a)+100);//输出 200
var a='0000100';//如果100前面很多0
alert(a+100);//输出 0000100100
alert(Number(a)+100);//输出 200
var a='+100';
alert(a+100);//输出 +100100
alert(Number(a)+100);//输出 200
var a='';
alert(a+100);//输出 100
alert(Number(a)+100);//输出 100
var a=' ';
alert(a);//输出一个空格
alert(Number(a));//输出 0
var a=true;
alert(a);//输出 true
alert(Number(a));//输出 1
var a=[];//数组为空
alert(a);//无输出
alert(Number(a));//输出 0
var a=[''];//数组里面有空字符串
alert(a);//无输出
alert(Number(a));//输出 0
var a=[123];
alert(a);//输出 123
alert(Number(a));//输出 123
var a=[1,2,3];
alert(a);//输出 [1,2,3]
alert(Number(a));//输出 NaN
var a=null;
alert(a);//输出 null
alert(Number(a));//输出 0
var a=function(){alert(1)};
alert(a);//输出 function(){alert(1)}
alert(Number(a));//输出 NaN
var json={abc:123};//只要是json类型,就转化不了
alert(json);//输出 [object Object]
alert(Number(json));//输出 NaN
var a;
alert(a);//输出 undefined
alert(Number(a));//输出 NaN
2.ParseInt():parseInt()从左到右一个一个转换,遇到一个非数字的东西,就不再转化了。但是无法转换true/false等其他类型。parseInt()认+-和空格,如果遇到,也认为是数字的一部分,也会继续往后走。
var a='100px1564623';//parseInt()从左到右一个一个转换,遇到一个非数字的东西,就不再转化了。但是无法转换true/false等其他类型。parseInt()认+-和空格,如果遇到,也认为是数字的一部分,也会继续往后走。
alert(parseInt(a));//输出 100
alert(parseInt(a,16));//输出 256.将a看成16进制,转换为十进制的数字。默认情况下按十进制转。
var a='12.34元';
alert(parseInt(a));//输出 12
3. ParseFloat():遇到小数点可以使用该方法。
//这时,可以使用方法parseFloat()
alert(parseFloat(a));//输出12.34
二、隐式类型转换:
1. +。 如‘200’+3 变成字符串
2. - * / % 比如‘200’-3 变成数字
3. ++ -- 变成数字
4. a++、a--
5. >< 数字的比较和字符串的比较不同
6. !取反 把右边的数据类型转成布尔值
7. ==
alert('200'+3);//输出2003
alert('200'-3);//输出197
var a='10';
a++;
alert(a);//输出11
alert('10'>9);//字符串和数字比较,进行了强制类型转换。输出true
alert('10'>'9');//输出false 两个字符串在比较时,是按其字符编码进行比较的。按每一数字位进行比较,1<9,所以为false
alert('10000'>'9');//此时,输出还是为false
alert(!'ok');//!取反 把右边的数据类型转成布尔值
alert('2'==2);//输出 true
三、NaN
定义:not a number不是个数字。不是个数字的数字类型。
所有的数字都是数字类型,但并不是所有的数字类型都是数字。数字和数字类型是两码事。
1. 一旦写程序中出现了NaN,那么肯定进行了非法的运算操作。
var a=Number('abc');
alert(typeof a);//输出number,说明类型为number
alert(a);//输出NaN
2. NaN的布尔值是false。
if(a){//此时输出为false。NaN转换布尔值是false
alert('真');
}
else {
alert('假');
}
3. 两个NaN并不相等。Nan与自己比较时假。所有数据类型除了NaN以外,其他自己与自己比较都是真。
alert(NaN==NaN);//输出false
isNaN():is not a number 。是否不是一个数字。帮助判断某些值是不是数字。可能值true/false。内部是根据Number()进行转换,如果能够转成一个数字,那么isNaN()输出false,否则输出true。
alert(isNaN(240));//输出false
alert(isNaN('wo'));//输出true