JavaScript重难点实例精讲
上QQ阅读APP看书,第一时间看更新

1.2 Number类型详解

1.2.1 Number类型介绍

在JavaScript中,Number类型的数据既包括了整型数据,也包括了浮点型数据。

下面讲解整型数据的处理规则。最基本的数值采用的是十进制整数,另外,数值还可以通过八进制或者十六进制表示。

① 八进制。如果想要用八进制表示一个数值,那么首位必须是0,其他位必须是0~7的八进制序列。如果后面位数的字面值大于7,则破坏了八进制数据表示规则,前面的0会被忽略,当作十进制数据处理。


var num1 = 024; // 20
var num2 = 079; // 79

其中num1首位为0,表示八进制数,然后判断后面每位数值在0~7内,符合八进制数据表示规则,最后将其转换为十进制数值2×8 + 4 = 20。

num2首位为0,表示八进制数,然后判断后面每位的数值,最后一位9超出了八进制字面值,所以不属于八进制数据,最终按照十进制处理,结果为79。

② 十六进制。如果想要用十六进制表示一个数值,那么前两位必须是0x,其他位必须是十六进制序列(0~9,a~f或者A~F)。如果超过了十六进制序列,则会抛出异常。


var num3 = 0x3f;  // 63
var num4 = 0x2g;  // SyntaxError: Invalid or unexpected token

其中num3前两位为0x,表示十六进制数据,然后判断后面每位均属于十六进制字面值区间,符合十六进制数表示,最后将其转换为十进制数值3×16+15=63。

num4前两位为0x,表示十六进制数据,然后判断后面每位数值,最后一位g超出了十六进制所能表示的字面值区间,所以不满足十六进制数据表示规则,最终抛出异常“SyntaxError:Invalid or unexpected token”。

此外,和Boolean类型一样,当其他类型在与Number类型进行数据转换时,也会遵循一定的规则。

(1)Boolean类型转换为Number类型

· true转换为1。

· false转换为0。

(2)Null类型转换为Number类型

· Null类型只有一个字面值null,直接转换为0。

(3)Undefined类型转换为Number类型

· Undefined类型只有一个字面值undefined,直接转换为NaN。

(4)String类型转换为Number类型

· 如果字符串中只包含数字,则会转换成十进制数;如果前面有0,会直接省略掉,例如"0123"会转换为123。

· 如果字符串中包含的是有效的浮点数,则同样按照十进制转换,例如"1.23"会转换为1.23。

· 如果字符串中包含有效的十六进制格式,则会按照十进制转换,例如"0x3f"会转换为63。

· 如果是空字符串,则转换为0。

· 如果字符串中包含了除上述格式以外的字符串,则会直接转换为NaN。

(5)Object类型转换为Number类型

· Object类型在转换为Number类型时,会优先调用valueOf()函数,然后通过valueOf()函数的返回值按照上述规则进行转换。如果转换的结果是NaN,则调用toString()函数,通过toString()函数的返回值重新按照上述规则进行转换;如果有确定的Number类型返回值,则结束,否则返回“NaN”。

Number类型作为一种常用的基本数据类型,开发人员在使用时往往会因为没有理解到原理而踩到一些隐形坑。接下来就讲解在使用Number类型数据或者函数时,需要注意的一些点。