JavaScript中有5中基本数据类型:Undefined、Null 、Boolean 、 Number 和String。还有一种复杂的数据类型----Object。
ECMA定义了不同的数值字面量格式,比如整数和浮点数。整数字面量格式有十进制,八进制和十六进制。浮点数值是该数值中必须包含一个小数点,并且小数点后面至少包含一位数字。 对于浮点数有一点需要注意, 由于浮点数值的精度问题,不能通过 “=”判断两个浮点数是否相等,这是因为浮点计算会产生误差问题。所以永远不要去测试某个特定的浮点数值。
1 虽然JavaScript中数值没有像 c中int double float类型,但是其能表示的数值范围也是有限的,大多数浏览器中,最小值为5e-324,最大值为1.7976931348623157e+308 ,最大最小值保存在 Number.MIN_VALUE 和Number.MAX_VALUE 中。超出表示范围会返回-Infinity 和 Infinity 。一个数字是不是无穷大可以用 isFinite()判断 。
2 还有一个特殊的数值,NaN(not a number) ,当0为分母或者 用number函数转换字符串时会返回NaN ,任何涉及NaN 的操作都会返回NaN ,这在多不计算中会导致问题,因此判断一个数字是不是NaN 十分重要,但是NaN 与任何值都不相同,换句话说
alert (NaN == NaN ) 会得到false 。因为不能使用 a == NaN 来判断数字a是不是NaN ,因此ECMAScript提供了isNaN ()函数判断一个数字是不是NaN 。这个判断在需要用number将字符串转为数字的时候尤其重要,比如判断一个字符串是否符合ip地址标准,具
体参考这里 。导致NaN出现的一大类原因是Number类的转换函数。
3 转换函数,有三个函数可以把非数值转换为数值,Number() ,parseInt() ,parseFloat() ,Number()函数可以用于任何数据类型,
parseInt() ,parseFloat()则专门用于把字符串转换为数值。三个函数对于同样的输入输出是不一样的。
Number()
² 对于Boolean值,转为1或0;
² 对于数字值,简单的传入传出;
² 如果是null值,返回 0;
² 如果是undefined ,返回 NaN;
² 对于字符串:
² 如果字符串中只包含数字(包括正负号),八进制十六进制都则将其转换为十进制,但是会忽略前导0,比如 “012”-> 12. 会忽略前导空格但不会忽略中间空格,“ 12”-> 12. “1 23”-> NaN.
² 如果字符串为空,返回 0;
² 字符串含有字符则返回NaN。
parseInt() 函数和parseFloat()专门用于转换字符串,因此在处理字符串的时候更常用这两个函数。他们针对字符串的准换更合理一些。
parseInt()准换规则:
² 忽略空格,找到第一个非空字符如果第一个非空字符不是数字字符或者负号,则返回NaN。
² 对于空字符串,会返回NaN。
² 第一个字符为数字字符中间含有其他负号,则只返回前面正常的数字。比如:“123abc234”—> 123
使用parseInt时还可以指定转换基数,比如:parseInt(“10”,16) —> 16.
parseFloat和parseInt处理规则类似。
基于 parseInt() 函数和parseFloat() 转换字符串的时候会对处理一下,如果我们只是想拿来计算这种处理很好,但是如果我们想转为数字之后进行判断原来字符串中是否含有
空格,前导0等 则由于准换规则无法判断,比如对于输入ip地址字符串的判断,此时我们可以用
" v == parseInt(v) .toString() " 判断是否含有前导 0 或者空格 。