Number类型的值:整数/浮点数值
整数
十进制 e.g.: var intNum = 50;
八进制 (严格模式下无效,解析错误)字面值首位必须是0,之后的数字序列为0~7 e.g.: var intNum = 070; //解析为十进制56 (如果字面值数值超出了范围,前导0将被忽略,后面的数值将被当做十进制数值解析 e.g.: var intNum = 078; //无效的八进制数字,解析为十进制78)
十六进制 字面值的前两位必须是0x(或0X),之后的数据序列为0~7或A~F(可大写,亦可小写) e.g.:var intNum = 0xA; //解析为十进制10
算数计算时,所有以八进制和十六进制表示的数值最终都会转换成十进制数值计算
浮点数
数值中必须包含一个小数点,且小数点后面必须至少有一个数字 e.g.: var floatNum = 1.5;(小数点前面可以没有整数,e.g.: var floatNum = .5; //有效,解析为0.5,但不推荐)
如果小数点后面没有数字,将被解析为整数值 e.g.: var floatNum = 5.; //解析为整数5 (因为浮点数保存需要的内存空间是整数保存的两倍,ECMAScript会不失时机地将浮点数值转为整数值)
科学计数法 极大或极小的数值可附加e(或E)来表示,等同于e前面的数值乘以10的指数次幂
数值范围
最大值:Number.MAX_VALUE 1.7976931348623157e+308
最小值:Number.MIN_VALUE 5e-324
超出最值,自动转换成Infinity/-Infinity 无穷值无法参与计算 (Number.POSITIVE_INFINITY/Number.NEGATIVE_INFINITY也分别保存着Infinity/-Infinity)
判断是否是有穷值 isFinite(arg) arg可以为任何类型的数据,非Number数据将隐式转换成Number数据
NaN
非数值(Not a Number)保存一个本来要返回数值但未返回数值的数据 如任何数值除以0,返回NaN
任何与NaN的操作都会返回NaN
NaN与任何值都不想等,包括NaN本身
判断是否未NaN isNaN(arg) arg可以为任何类型的数据,非Number数据将隐式转换成Number数据
数值转换
Number()/parseInt()/parseFloat()
Number()可用于任何数据类型转换成数值 parseInt()/parseFloat()一般用于字符串转换成数值
Number()转换规则:
Boolean true-->1 false-->0
Number 返回本身
null 0
undefined NaN
String a/只包含数字(包括前面带正好或符号)-->十进制数值 (前导为0的忽略0,不会转换成八进制/前导为0x的,转换为十六进制大小的十进制)
b/只包含浮点-->对应的浮点数值(前导0被忽略)
c/只包含空字符串-->0
d/包含其他字符-->NaN
parseInt()转换规则:(正因为Number()处理字符串转换过于复杂,一般字符串转换用parseInt()比较好)
主要看其是否符合数值模式
忽略字符串前面的空格,直到找到第一个非空格字符
a/第一个字符不是数字或正负号-->NaN e.g.:parseInt("abcd")-->NaN e.g.:parseInt("")-->NaN(区别Number("")-->0)
b/第一个字符是数字字符,顺序解析第二个,直到解析完所有字符或遇到非数字字符结束-->已成功解析为数字的数字字面量 e.g.:parseInt("1234blue")-->1234
c/能够解析Number类型的整数的各种格式:十进制/八进制/十六进制(parseInt()可以传递第二个参数:多少进制;十六进制可以不带前面的0x,推荐传递带两个参数的方式) e.g.:parseInt("0xA")-->10 parseInt("A", 16)-->10
parseFloat()转换规则:
类似parseInt()
字符中有两个以上的小数点时,第一个小数点有效,第二个之后都无效,且后面的字符被忽略 e.g.:parseFloat("11.22.33")-->11.22
只解析十进制格式字符串,没有第二个参数指定转换方式
十六进制格式字符串-->0 e.g.:parseFloat("0xA")-->0
没有小数点的整数字符串-->整数 e.g.:parseFloat("1234blue")-->1234
科学计数法 e.g.:parseFloat("3.14e2")-->314