说起Number,应该是ECMAScript中最令人关注的数据类型了,遵循IEEE754格式,最基本的声明如下:
var intNum = 34; //整数
var a = 070; //若数值起始为0,JS尝试解析为8进制数字
var b = 079; //八进制解析失败,解析为十进制,返回79
var c = 08; //八进制解析再次失败,返回8
var d = 0xA; //若其实为0x或者0X,则尝试解析为十六进制
var e = 0x1f; //同上,并且ABCDEF不区分大小写
1、浮点数值
浮点数值的声明有两种方法
var a = 34.34
var b = .34 //不推荐
碰到比较大或者比较小的数值可以用科学记数法来表示
var as = 342343.34e9; //表示342343.34乘以10的9次方
但是,浮点数值的最高精度是17位小数,但在进行算术计算时其精度就远远不如整数,所以会出现如下情况
因此,永远不要测试特定的浮点数的值,比如:
function fn(a,b) {
return a + b;
}
console.log('今天花了' + (1.2 + 122.6) + '元'); //不可靠
//那怎么办呢,凉拌!!
console.log('今天花了' + (1.2 * 100 + 122.6 * 100) / 100 + '元'); //凑合
2、数值范围
JS能容忍的最大数值在Number对象中已经明确给出:
Number.MAX_VALUE
Number.MIN_VALUE
如果计算出来的值大于这个maxvalue,则返回Infinity值,同理如果小于,则是-Infinity,其实Number.NEGATIVE_INFINITY与POSITIVE_INFINITY也分别保存着这两个值
如果想要判断某个数值是否在最大值与最小值之间呢?isFinite()!!
3、NaN
先看如下有趣的测试:
Infinity + Infinity = NaN
NaN : not a number 意思为不是一个数字,它最特殊的地方就是“任何值都与它不相等,甚至于它自己”
再看:,是的,0/0 在JS中没有报错,得到NaN,2/0更不会报错,得到一个Infinity!!!!
但是,我们有个牛逼函数,isNaN,这个函数判断一个数值是不是不是一个数字(很绕吧)
毁三观了?其实很好理解嘛,1是个数字,所以他is a number 而非 not a number
空字符串可以转换为0,所以也not not a number
'fdsaf'不可转换为数字,所以not a number is true !!!
NaN本来就不是一个数字,理所应当了
'12'可以转换为数字,所以返回false
true与false可转换为1和0,所以也是false啦
后续为数值转换、Number内置函数、Math对象,欢迎拍砖!
来源:oschina
链接:https://my.oschina.net/u/942854/blog/117430