
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类型数据或者函数时,需要注意的一些点。