有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。Number()函数是转型函数,可以用于任何数据类型,而另外两个则专门用于把字符串转成数值。
alert(Number(true)); //1,Boolean类型的true和false分别转换成1和0
alert(Number(25)); //25,数值型直接返回
alert(Number(null)); //0,空对象返回0
alert(Number(undefined)); //NaN,undefined返回NaN
如果是字符串,应该遵循一下规则:
1.只包含数值的字符串,会直接转成成十进制数值,如果包含前导0,即自动去掉。
alert(Number('456')); //456
alert(Number('070')); //70
2.只包含浮点数值的字符串,会直接转成浮点数值,如果包含前导和后导0,即自动去掉。
alert(Number('08.90')); //8.9
3.如果字符串是空,那么直接转成成0。
alert(Number('')); //0
4.如果不是以上三种字符串类型,则返回NaN。
alert('Lee123'); //NaN
5.如果是对象,首先会调用valueOf()方法,然后确定返回值是否能够转换成数值。如果转换的结果是NaN,则基于这个返回值再调用toString()方法,再测试返回值。
var box = {
toString: function () {
return '123'; //可以改成return 'Lee'查看效果
}
};
alert(Number(box)); //123
由于Number()函数在转换字符串时比较复杂且不够合理,因此在处理整数的时候更常用的是parseInt()。
alert(parsetInt('456Lee')); //456,会返回整数部分
alert(parsetInt('Lee456Lee')); //NaN,如果第一个不是数值,就返回NaN
alert(parseInt('12Lee56Lee')); //12,从第一数值开始取,到最后一个连续数值结束
alert(parseInt('56.12')); //56,小数点不是数值,会被去掉
alert(parseInt('')); //NaN,空返回NaN
parseInt()除了能够识别十进制数值,也可以识别八进制和十六进制。
alert(parseInt('0xA')); //10,十六进制
alert(parseInt('070')); //56,八进制(在IE下会被识别为八进制,在fix下会识别为8进制)
alert(parseInt('0xALee')); //10,十六进制,Lee被自动过滤掉
ECMAScript为parseInt()提供了第二个参数,用于解决各种进制的转换。
alert(parseInt('0xAF')); //175,十六进制
alert(parseInt('AF',16)); //175,第二参数指定十六进制,可以去掉0x前导
alert(parseInt('AF')); //NaN,理所当然
alert(parseInt('101010101',2)); //314,二进制转换
alert(parseInt('70',8)) //56,八进制转换
parseFloat()是用于浮点数值转换的,和parseInt()一样,从第一位解析到非浮点数值位置。
alert(parseFloat('123Lee')); //123,去掉不是别的部分
alert(parseFloat('0xA')); //0,不认十六进制
alert(parseFloat('123.4.5')); //123.4,只认一个小数点
alert(parseFloat('0123.400')); //123.4,去掉前后导
alert(parseFloat('1.234e7')); //12340000,把科学技术法转成普通数值,会省略后边两个0
总结:parseInt中:空字符是NaN,专门用于把字符串转成数值。
Number中:空字符是0,可以用于任何数据类型转化为数值。
alert(parseInt('070')) 70/56;八进制(在IE下会被识别为八进制,在火狐下会识别为8进制)