在JavaScript中一共有七种类型,如下
- 数值-number
- 字符串-string
- 布尔值-boolean
- Symbol-ES6时新添加的
- null
- undefined
- 对象-object
这些都是需要初步熟记的内容
下面逐一展开这些数据类型
一.数值-number
数值顾名思义就是数字
1.1存储方式
在JavaScript中所有的数字都是以64位浮点数形式存储的,也就是说在JavaScript底层中其实根本就没有整数,那么当我们的运算需要用到整数了的时候该怎么办呢?这时候JavaScript就会自动的把64位浮点数转换为32位整数,再进行运算。
1.2数值精度
JavaScript中浮点数的64个二进制位,是用以下方式组成的
第1位:是符号位,用来表示正负,0 代表了正数,1 则代表负数
第2位到第12位(11位):代表了指数部分
第13位到第64位(52位):小数部分(有效数字)
由第1位,即符号位来确定一个数的正负
由第2位到第12位,即指数部分来确定这个数的大小
由第13位到第64位,即小数部分来确定这个数的精度
1.3数值范围
由前文所说,64位浮点数的指数部分的长度是11位,则指数的最大值是2047,即2的11次方减1,其一半用来表示负数,那么JavaScript的数值表示范围就在(2的1024次方,2的-1023次方)之间。
那么当一个数超出了这个范围会发生什么呢?我们要分两种情况来讨论
如果这个数值大于等于2的1024次方,就会发生【正向溢出】,返回Infinity
如果这个数值大于等于2的-1075(此处加上了小数部分的那52位,参看前文)次方,就会发生【负向溢出】,返回0
2.数值表示法
你可以用字面形式直接表示如十进制,八进制等
也有科学计数法的表示方法
如1110000怎么表示呢?可以表示为
111e4 //1110000
如果是0.111可以表示为
111e-3//0.111
注意e和E是一样的,在它们的后面需要跟一个整数,这个整数就是这个数值的整数部分
ps:有两种情况,JavaScript会自动将数值转换为科学计数法表示,其他情况采用字面形式直接表示
【1】小数点前的数字多于21位
【2】小数点后的0多于5个
3.进制
JavaScript有如下四个进制
- 十进制:正常书写,前面不加0
- 二进制:前缀0b或者0B
- 八进制:前缀0x或者0X
- 十六进制:前缀0o或者0O,或者前导0,并且只有0-7的八个数字的数值
另外,JavaScript会自动的将八进制,十六进制,二进制转换为十进制
ps:当前导数字为0,后面的数字有8,9的话,会被默认为十进制
4.特殊的数值
前文说过,JavaScript的64位浮点数,有一个符号位的存在,那么我们可以得出任何一个数都有正负,0这个数也是也一样
JavaScript中存在两个0,+0与-0,然而他们是等价的
而唯独当+0或-0作为分母时,返回值不相等
(1 / +0) === (1 / -0) // 返回值:false
而之所以这样的原因是因为左边除以+0得到的是+Infinity,除以-0得到的是-Infinity,他们不相等,下文会讲道
4.1
Infinity表示【无穷】,当正数值过大或负数值过小无法表示,以非零数字除以0,都会得到Infinity。
Infinity亦有正负,Infinity为正无穷,-Infinity为负无穷
注意单纯的数学运算JavaScript不会报错,因为正向溢出和负向溢出以及以非零数字除以0都会返回Infinity
Infinity大于一切数值,也小于一切数值,但是这两种规则对NaN不适用
计算方面Infinity符合无穷的数学计算规则
以下是引用阮一峰老师的解释
0乘以
Infinity
,返回NaN
;0除以Infinity
,返回0
;Infinity
除以0,返回Infinity
。
0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // InfinityInfinity
加上或乘以Infinity
,返回的还是Infinity
。
Infinity + Infinity // Infinity
Infinity * Infinity // InfinityInfinity
减去或除以Infinity
,得到NaN
。
Infinity - Infinity // NaN
Infinity / Infinity // NaNInfinity
与null
计算时,null
会转成0,等同于与0
的计算。
null * Infinity // NaN
null / Infinity // 0
Infinity / null // InfinityInfinity
与undefined
计算,返回的都是NaN
。
undefined + Infinity // NaN
undefined - Infinity // NaN
undefined * Infinity // NaN
undefined / Infinity // NaN
Infinity / undefined // NaN
4.2 NaN
NaN是JavaScript特殊值,表示非数字,也就是Not a Number,字符串解析为数字出错时经常出现
另外一些数学函数解析成数字时也会出现
0/0这种运算也会的到NaN
需要注意的是NaN是一个特殊值,其类型依旧是Number
运算规则:
NaN不等于任何值,包括其本身
NaN的布尔值为false
NaN与任何数的运算,得到的都是NaN