一、Number()
把任何数据类型的值转换为数值
- 如果是
Boolean
类型,true和false值将分别被转换为1和0。- 如果是
Number
类型,只是简单的传入和返回。- 如果是
null
值,返回0。- 如果是
undefined
值,返回NaN
。- 如果是
String
类型:
a. 如果字符串中只包含数字时,将其转换为十进制数值,忽略前导0,类似调用parseInt()
b. 如果字符串中包含有效浮点格式,如’1.1’,将其转换为对应的浮点数字,忽略前导0,类似调用parseFloat()
c. 如果字符串中包含有效的十六进制格式,如’0xf’,将其转换为相同大小的十进制数值,类似调用parseInt()
d. 如果字符串为空,将其转换为0
e. 如果字符串中包含除上述格式之外的字符,则将其转换为NaN
- 如果是对象,则调用对象的
valueOf()
方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN
,则调用对象的toString()
方法,然后再依照前面的规则转换返回的字符串值。
示例:
Number函数主要是用于将任何其他数据类型的值转化为数值类型。
转换规则如下:
1、如果是布尔类型的值,true转化为1,false转化为0。
console.log(Number(true)) //1
console.log(Number(false)) //0
2、如果是简单的数值型,则直接返回。
3、如果是null,则直接转化为0.
4、如果是undefined,则直接转化为NaN.
5、如果是字符串,则去掉开头和结尾的空格部分,如果仍然存在其他非数字字符,则直接返回NaN,否则返回数字。
console.log(Number(" 10")) //10
console.log(Number(" 10s")) //NaN
6、如果是字符串,前面存在0或者(+-)号。将其转换为数字。
console.log(Number("+000001")) //1
console.log(Number("-1121")) //-1121
7、如果在其中存在十六进制的字符串,则将其转化为十进制数字。
console.log(Number("0xf")) //15
8、如果是空字符串,则直接转换为0。
console.log(Number("")) //0
9、如果除了以上内容的字符串,还存在其他字符串,则直接返回NaN。
10、如果是对象类型的数据,则首先调用valueOf(),则再按照上述进行转换。如果转换的结果为NaN,则调用toString()方法再进行转换,目的就是将对象转化为基本数据类型。
二、parseInt()
parseInt():把字符串转换为整数值
parseInt()
函数在转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字或者负号,parseInt()
就会返回NaN
,同样的,用parseInt()
转换空字符串也会返回NaN。
- 如果第一个字符数字字符,
parseInt()
会继续解析遇到了一个非数字字符停止解析。- parseInt()方法还有基模式(默认十进制),可以把二进制、八进制、十六进制或其他任何进制的字符串转换成整数。基是由parseInt()方法的第二个参数指定的,所以要解析十六进制的值,当然,对二进制、八进制,甚至十进制(默认模式),都可以这样调用parseInt()方法。
var num1 = parseInt("AF",16); //175
var num2 = parseInt("AF"); //NaN
var num3 = parseInt("10",2); //2 (按照二进制解析)
示例:
parseInt()可以将字符串转化为一个整数,与Number()相比,parseInt()还可以转化为字符串开头为数字的字符串。
其转换的规则如下:
1、如果字符串开头不是数字或者正负号,则直接返回NaN(所以当为空字符串时,则直接返回NaN)
console.log(parseInt("")) //NaN
console.log(parseInt("-10")) //-10
console.log(parseInt("+10")) //10
2、如果开头是数字或者正负号,则继续解析接下来的字符,直到找到不是该字符的字符串。
console.log(parseInt("1000de")) //1000
3、如果在开头跟着是0x后面是数字字符换,则会将其看做十六进制,转化为十进制。
console.log(parseInt("0xfss")) //15
4、parseInt()的第二个参数,表示使用多少进制来解析。
console.log(parseInt("11", 16)) //17
console.log(parseInt("11", 2)) //3
console.log(parseInt("11", 8)) //9
5、parseInt()中传入小数时,则从小数点处断开。
console.log(parseInt("11.112")) //11
console.log(parseInt("-11.22")) //-11
三、parseFloat()
- 与
parseInt()
函数类似,区别是遇到了二个非数字字符停止解析- parseFloat()
只能解析十进制
,因此它没有第二个参数指定基数的用法
如果字符串中包含的是一个可解析为正数的数(没有小数点,或者小数点后都是零),
parseFloat()
会返回整数。
示例:
parseFloat()可以解析字符串为浮点数,大体和parseInt()一致。
1、浮点数第一个小数点有效,第二个小数点就没有效了。
console.log(parseFloat("100.11.11")) //100.11
2、如果传入的参数中包含可解析的整数,不包含小数,则直接返回整数。
console.log(parseFloat("10212")) //10212
console.log(parseFloat("0xA")) //0
console.log(parseFloat("0908.5")); //908.5
parseInt() 和parseFloat() 的区别在于:
parseFloat()
所解析的字符串中第一个非数字字符是有效的,而parseInt()
遇到第一个非数字字符会停止解析
parseFloat()
只有十进制转换,parseInt()
第二个参数可以设置基数,按照这个基数的进制来转换。