1、Number类型
Number类型使用IEEE754格式来表示整数和浮点数值。
表示方式:
十进制: var num1 = 10;
八进制: var num2 = 070; //八进制的56
十六精致: var num3 = 0xff/0xFF; //十六进制的255
注意: var num4 = 078; //无效的八进制数值——将会被解析为78
1)浮点数值
所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。注意:虽然小数点前面可以没有整数,但不推荐这种写法。
由于保存浮点数值需要的内存空间是保存整数值的两倍,所以如果小数点后面没有跟任何数字,那么这个数值就可以被作为整数值来保存,或者该浮点数本身就是一个整数。
ep: var floatNum1 = 1. ; //1
var floatNum2 = 10.0; //10
科学计数法(e表示法)格式: 前面是一个数值(可以是整数也可以是浮点数),中间是一个大写或小写的字母E,后面是10的n次幂。
ep: var floatNum3 = 3.12e7; //等于31200000
var floatNum4 = 0.0000003; //如果小数点后面带有6个零,则会采用科学计数法来表示,即,3e-6。
注意:浮点数值的精度是17位小数,但在进行计算时其精度远远不如整数。
ep: var sum1 = 0.1 + 0.2; //0.30000000000000004
var sum2 = 0.1 +
0.7; //0.7999999999999999
不要使用浮点数来做这种测试:
var a = 0.1,b = 0.2; if(a+b == 0.3){ //不要这样测试 document.write("You got 0.3"); }
2)数值范围
ECMAScript能够表示的最小数值保存在 Number.MIN_VALUE
最大数值保存在 Number.MAX_VALUE
如果某次计算的结果得到的是一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值,如果是负值,则是-Infinity。Infinity是一个不能参与计算的数值。
isFinite()函数:判断一个值是不是位于最大和最小的数值之间。
var result = Number.MAX_VALUE + Number.MAX_VALUE; alert(isFinite(result)); //false
提示:Number.NEGATIVE_INFINITY和Number.POSITIVE_INFINITY 分别保存着Infinity和-Infinity。
3)NaN
NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数但未返回数值的情况,避免抛出错误。
ep:var num = 0/0; //NaN 如果是10/0则返回的是Infinity。
NaN具有两个非同寻常的特点:
1、任何涉及NaN的操作(ep:NaN/10)都会返回NaN
2、NaN也任何值都不相等,包括自身。 alert(NaN == NaN); //false
isNaN()函数:任何不能被转换为数值的值都会导致这个函数返回true。
注意:isNaN()函数同样适用于对象,在基于对象调用时isNaN()函数时,会首先迪欧用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值,如果不能则基于这个返回值再调用toString()方法,再测试返回值。
var object = { name : "liuxuech", valueOf : function(){ return "a"; } }; alert(isNaN(object));
4)数值转换
Number()、parseInt()、parseFloat():把非数值转换为数值。
第一个函数可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。
转换规则:
Boolean true和false将被转换为1和0。
数字值 只是简单的传入和返回。
null值 返回0
undefined 返回NaN
字符串则遵循以下规则:
"1"、"10"、"0011" ——> 1、10、11(忽略前导零)
"1.1" ——> 1.1
"0xff" ——> 255
"" ——> 0
除了这些格式 ——> 转换为NaN
如果是对象 ——> 调用对象的valueOf()方法,然后依照前面的规则转换返回的值,如果转换的结果是NaN,则调用对象的toString()方法,然后再依次依照前面的规则转换返回的字符串值。
由于Number()函数在转换字符串时比较复杂而且不够合理,因此在处理整数的时候更常用的是parseInt()函数。parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会完全忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者正负号,parseInt()就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN(Number()对空字符返回0)。
以下是parseInt()的转换规则:
"123blue" ——> 123
"22.5" ——> 22
"0xff" ——> 255
"070" ——> 70(在ECMAScript 3 中是转换为56,但是在第5版是转换为70)
parseInt("ff",16) ——> 255
parseInt("ff") ——> NaN
parseInt("10",2) ——> 2
parseInt("10",8) ——> 8
parseInt("10",10) ——> 10
parseInt("10",16) ——> 16
以下是parseFloat()的转换规则:
"123blue" ——> 1234
"0xA" ——> 0
"22.3.3" ——> 22.3
"0908.3" ——> 908.3
"3.125e7" ——> 31250000