有3个函数可以把 非数值转换为数值:Number(),parseInt()和parseFloat()。Number()函数可以用于任何数据类型,另两个函数专门用于把字符串转换成数值。
1.Number()
转换规则:
- 如果是Boolean值,true和false分别被转换为1和0;
- 如果是数值,只是简单的传入和返回;
- 如果是null值,返回0;
- 如果是undefined,返回NaN;
- 如果是字符串,遵守以下规则:
- 如果字符串中只含数字(包括前面带正负号的情况),则将其转换为十进制数值,即“1”变为1,“011”变为11;
- 如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值;
- 如果字符串中包含有效的十六进制格式,例如“0xf”,则将其转换为相同大小的十进制整数值;
- 如果字符串是空的(不包含任何数值),则将其转换为0;
- 如果字符串包含除上述格式之外的字符,则将其转换为NaN.
- 如果是对象,调用对象的valueOf()方法,然后按照上述规则转换。如果转换的结果是NaN,则调用对象的toString()方法,然后按照上述规则转换。
例如:
var num1=Number("hello world!"); //NaN
var num2=Number(""); //0
var num3=Number("000011"); //11
var num4=Number(true); //1
2.praseInt()
praseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字符号或者负号,praseInt()会返回NaN。如果第一个字符是数字字符,praseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。例如,“22.2”会被转换为22,因为小数点并不是有效的数字字符。
例如:
var num1-parseInt("1234aa12"); //1234
var num1-parseInt(""); //NaN
var num1-parseInt("0xA"); //10
var num1-parseInt(22.2); //22
var num1-parseInt("070"); //56
var num1-parseInt("70"); //70
var num1-parseInt("0XF"); //15
"070"在ECMAScript 3 JavaScript引擎中,被当成八进制字面量,而在ECMAScript 5 JavaScript引擎中,前边的0被当作无效,从而转换为70。因此,parseInt()提供第二个参数:转换时使用的基数。例如:
var num=parseInt("0xAF",16); //175
var num1=parseInt("10",2); //2
var num1=parseInt("10",8); //8
var num1=parseInt("10",10); //10
var num1=parseInt("10",16); //16
3.parseFloat()
与parseInt()相似,parseFloat()也是从第一个字符(位置0)开始解析每个字符,而且一直解析到字符串末尾,或者遇到一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,第二个小数点就是无效的了,因此它后面的字符串将被忽略。例如,“22.34.5”将会被转换为22.34。
var num1=parseFloat("1234a12"); //1234
var num1=parseFloat("0xA"); //0
var num1=parseFloat("22.2"); //22.2
var num1=parseFloat("22.34.5"); //22.34
var num1=parseFloat("0908.5"); //908.5
var num1=parseFloat("3.125e7"); //31250000