最近经常遇到关于类型转换的问题,索性上网搜搜在此总结一篇
js字符转换成数字主要有三种可用的方法:转换函数、强制类型转换、利用js变量弱类型转换。
1. 转换函数:
js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行,对其他类型返回的都是NaN
parseInt() 函数
可解析一个字符串,并返回一个整数。
parseInt(string, radix)
radix 可选。表示要解析的数字的基数(进制)。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
返回值:返回解析后的数字。
*如果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN
*如果 string 以 "0x" 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
*如果 string 以 0 开头,那么允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
*如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
一些示例如下:
parseInt("1234blue"); // returns 1234
parseInt("0xA"); //returns 10
parseInt("22.5"); //returns 22
parseInt("blue"); //returns NaN
parseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基数是由parseInt()方法的第二个参数指定的,示例如下:
parseInt("AF",16); //returns 175 parseInt("10",2); //returns 2 parseInt("10",8); //returns 8 parseInt("10",10); //returns 10
如果十进制数包含前导0,那么最好采用基数10,这样才不会意外地得到八进制的值。例如:
parseInt("010"); //returns 10 parseInt("010", 8); //returns 8 parseInt("010", 10); //returns 10
parseFloat() 函数可解析一个字符串,并返回一个浮点数。
该函数判断字符串中的首个字符是否是数字,如果是,则对字符串进行解析,然后以数字返回该数字,而不是作为字符串。
*如果参数字符串的第一个字符不能被解析成为数字,则 parseFloat 返回 NaN。
*可以通过调用 isNaN 函数来判断 parseFloat 的返回结果是否是 NaN。
*开头和结尾的空格是允许的。
*如果只想解析数字的整数部分,请使用 parseInt() 方法。
示例如下:
parseFloat("1234blue"); //returns 1234 parseFloat("0xA"); //returns 0 parseFloat("22.5"); //returns 22.5 parseFloat("22.34.5"); //returns 22.34 parseFloat("0908"); //returns 908 // parseFloat 针对开头为 0 0的处理 parseFloat("blue"); //returns NaN
parseFloat()方法与parseInt()方法相似,不同之处在于,parseFloat必须以十进制形式表示浮点数,没有基模式。
2.强制类型转换
Boolean(value)——把给定的值转换成Boolean型;
Number(value)——把给定的值转换成数字(可以是整数或浮点数);
String(value)——把给定的值转换成字符串。
3. 利用js变量弱类型转换
举个小例子,一看,就会明白了。
var str = 5332355';
var x = str - 0;
x = x * 1;
利用了js的弱类型的特点,只进行了算术运算,实现了字符串到数字的类型转换,不过这个方法还是不推荐的。存在一些安全问题。