在JavaScript中一共有七种类型,如下

  1. 数值-number
  2. 字符串-string
  3. 布尔值-boolean
  4. Symbol-ES6时新添加的
  5. null
  6. undefined
  7. 对象-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有如下四个进制

  1. 十进制:正常书写,前面不加0
  2. 二进制:前缀0b或者0B
  3. 八进制:前缀0x或者0X
  4. 十六进制:前缀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,返回 0Infinity除以0,返回 Infinity
0 * Infinity // NaN
0 / Infinity // 0
Infinity / 0 // Infinity
Infinity加上或乘以 Infinity,返回的还是 Infinity
Infinity + Infinity // Infinity
Infinity * Infinity // Infinity
Infinity减去或除以 Infinity,得到 NaN
Infinity - Infinity // NaN
Infinity / Infinity // NaN
Infinitynull计算时, null会转成0,等同于与 0的计算。
null * Infinity // NaN
null / Infinity // 0
Infinity / null // Infinity
Infinityundefined计算,返回的都是 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