NaN,在Js中非常特殊.NaN是Number对象的一个属性.我们可以通过Number.NaN来取得.所以NaN严格的来说,不是一个数字,但是又具有一些数字的特征比如 typof NaN 为Number.
1.NaN的类型(typeof)是Number
2.NaN无大小,并且NaN不等于NaN!
比如我们上面表中列出的,将字符串abc转换为数字的时候,得到的结果为NaN.原因是abc在数字中没有对应的值,强制转换为数字类型后,得到NaN.
事实上,
NaN也可以参与运算,在js中是这么处理的:
NaN参与数字运算,结果仍然是NaN.
所以: 1+NaN =NaN,1.5+NaN =NaN
NaN参与混合类型计算,遵守数字类型和非数字类型混合运算的规律:
所以:NaN+"abc" 结果:NaNabc; “abc”+NaN 结果:abcNaN
NaN不等于NaN
所以:NaN==NaN 结果:false; NaN!=NaN 结果:true ;NaN>NaN||NaN<NaN结果:false(小心,这里也是false)
Js中另外一个特殊的数字叫做Infinity,表示正无穷大.在js中在区间-(+)1.7976931348623157E+10308之外的数字都认为是无穷大(负无穷大).同样的,这句话也有两个含义:
1.Infinity的类型是Number
2.Infinity在js中是有限的,但是只要其大(或小)到一定程度,js就会认为其是无穷.
比如 2/0就会产生Infinity.
同样的Infinity有很多特性,Infinity参与数字运算的结果,我总结了一张表:
Infinity+(*)常数 | Infinity-(/)常数 | Infinity-(/)Infinity | Infinity+(*)Infinity | Infinity==Infinity | Infinity!=Infinity |
Infinity | Infinity | NaN | Infinity | true | false |
运算规则大体上类似与NaN,但是还有些不同
Infinity参与混合类型计算,遵守数字类型和非数字类型混合运算规律
五.补充的几个方法
JS数字类型的几个方法好像不太见到有人用,我用搜索引擎搜的时候,发现造车轮的程序员还大有人在.
1.Number.toFixed(num);
用途:取得小数点后num位有效数字,运算中会四舍五入.
举例: (3).toFixed(3),得到3.000;(3.1415926).toFixed(3) ,结果3.142
2.Number.toPrecision(num)
用途:取num位有效数字,运算中会四舍五入
举例: (3).toPrecision(3),得到3.00;(3.1415926).toFixed(4) ,结果3.142