数值转换

Javascript中有3个函数可以把非数值转换为数值:Number() 、parseInt() 、ParseFloat()。

其中,Number() 可以用于任何数据类型,parseInt() 、ParseFloat()则专门用于把字符串转换为数值。这三个函数对于同样的输入会有返回不同的结果。

Number() 函数转换规则

1、如果是数字值,只是简单的传入和返回,即返回数字本身;

2、如果是Boolean值,true和false将分别被转换为1和0;

3、如果是null值,返回0;

4、如果是undefined,返回NaN;

5、如果是字符串,则

  (1)如果字符串中只包含数字(包括前面带正负号的情况),则将其转换为十进制数值;(前导的零会被忽略)

  (2)如果字符串中包含有效的浮点格式,则将其转换为对应的浮点数值;(前导的零会被忽略)

  (3)如果字符串中包含有效的十六进制格式,则将其转换为相同大小的十进制整数值;

  (4)如果字符串是空的,则将其转换为0;

  (5)如果字符串中包含除上述格式以外的字符,则将其转换为NaN.

6、如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换为返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再按照前面的规则转换返回的字符串值。

ps:一元加操作符的操作与Number()函数相同。

parseInt() 函数转换规则

1、如果是整数值,只是简单的传入和返回,即返回数字本身;

2、如果是浮点数,只保留整数部分(向下取整);

3、如果是Boolean值,true和false将被转换为NaN;

4、如果是null值,返回NaN;(不同于Number()方法

5、如果是undefined,返回NaN;

6、如果是字符串,若字符串第一个非空字符前面含有空格,则忽略空格,直接从第一个非空字符开始解析。如果第一个非空字符不是数字或者负号,则返回NaN;如果第一个非空字符是数字,则继续解析直至解析完毕或者遇到一个非数字符号为止。   例如 “   1234blue”会被转换为1234

parseFloat() 函数转换规则

ParseFloat()的转换规格和parseInt() 基本类似,也是从第一个非空字符开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇到一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。 例如 “  22.34.5”会被转换为22.34

ParseFloat()和parseInt() 还有一个重要的区别在于ParseFloat()始终都会忽略前导的零,意思就是ParseFloat()可以识别几乎所有的浮点数值格式,也包括十进制整数格式,但十六进制格式的字符串则始终会被转换为0.    例如 “0xA” 会被转换为0

最后还应注意的是:如果字符串包含的是一个可解析为整数的书(没有小数点,或者小数点后都是零),ParseFloat()会返回整数。

 

parseInt()传入参数

可以为parseInt()函数传入第二个参数:转换时使用的基数(即多少进制)。

var num = parseInt("0xAF", 16);       //175
var num1 = parseInt("AF", 16);        //175
var num2 = parseInt("AF");            //NaN

指定基数会影响到转换的输出结果。

var num1 = parseInt("10", 2);         //2 – parsed as binary
var num2 = parseInt("10", 8);         //8 – parsed as octal
var num3 = parseInt("10", 10);        //10 – parsed as decimal
var num4 = parseInt("10", 16);        //16 – parsed as hexadecimal

不指定基数意味着让parseInt()决定如何解析输入的字符串,因此为了避免错误的解析,建议无论在上面情况下都明确指定基数。

 

参考:《Js高级程序设计》第三版P30-32

posted @ 2017-03-29 15:20  gq_orange  阅读(432)  评论(0编辑  收藏  举报