JavaScript 的数据类型, 一共有8种, 即

  • 数字 (number)
  • 字符串 (string)
  • 布尔 (boolean)
  • 符号 (symbol)
  • 空 (undefined)
  • 空 (null)
  • 对象 (object)
  • 任意精度的整数 (bigInt)

以下三者都不是数据类型, 它们都属于对象 (object):

  • 数组
  • 函数
  • 日期

1 数字 number

1.1 存储形式: 64位浮点数

(1) 概念
浮点, 意思是浮动的点, 值小数点会乱动.
JavaScript 的所有数字都是以64位浮点数形式储存, 即使整数也是如此, 所以1和1.0是相同的, 是同一个数. 可以说, JavaScript语言的底层根本没有整数, 所有数字都是小数(64位浮点数).
由于浮点数不是精确的值, 所以对于小数的比较和运算要特别小心.
(2) 举例
1可以表示为1.0;
123.456可以表示为1.23456e10^2, 也可以表示为12345.6e10^-2.
(3) 64位存储一个number

  • 符号占1位;
  • 指数占11位 (-1023~1024);
  • 有效数字占52位(开头的1省略).

image.png

1.2 数字范围(忽略符号位)

  • 指数拉满、有效数字拉满,得到最大二进制数字;
  • Number.MAX_VALUE: 1.7976931348623157e+308;
  • 指数负方向拉满、有效数字最小1,得到最小值;
  • Number.MIN_VALUE: 5e-324.

    1.3 数字精度(有效数字)

  • 最多只能到52+1个二进制位表示有效数字;

  • 2^53对应的十进制是9后面15个零;
  • 所以15位有效数字都能精确表示;
  • 16位有效数字如果小于90开头,也能精确表示;
  • 9110000000000001就存不下来.

    1.4 特殊值

  • NaN (not a number, 这是一个不确定具体指的数字)

  • 正0 和 负0
  • 无穷大: infinity, +infinity, -infinity

2 字符串 string

‘’空格也是字符串.
2.1 写法
(1) 一般写法
‘雷吼’
“雷吼”
雷吼
(2) 转义
转义, 就是用另一种写法表示你想要的东西:

  • \’ 表示 ‘
  • \” 表示 “
  • \n 表示换行
  • \r 表示回车
  • \t 表示tab制表符
  • \ 表示 \
  • \uFFFF 表示对应的Unicode字符
  • \xFF 表示前256个Unicode字符

(3) 多行字符串
用反引号, 就可以使字符串里的回车生效, 比如
let s = 这样是<br />可以的<br />用反引号很容易做到
(4) 属性
string.length

  • ‘123’.length // 3
  • ‘\n\r\t’.length // 3
  • ‘’.length // 0
  • ‘ ‘.length // 1

string[index]

  • let s = ‘hello’;
  • s[0] // “h”

(5) base64转码
一般用来隐藏招聘启事里的简历, 但实际上并不能保密.
语法:

  • window.btoa( )
  • window.atob( )

3 布尔 boolean

为了纪念19世纪英国数学家George Boole而命名.

3.1 两个布尔值

boolean只有两个值: true, false.

3 附: 五个falsy值

falsy 就是相当于 false 但又不是 false 的值
分别是

  • undefined
  • null
  • 0
  • NaN
  • ‘’(空引号)

4 符号 symbol

很少用.

5 空 undefined

如果一个变量声明了, 但没有赋值, 那么默认值就是undefined, 而不是null.
如果一个函数, 没有写return, 那么默认return undefined, 而不是null.

6 空 null

前端程序员习惯上, 把对象的空值写为null, 把非对象的空值写为undefined.

7 对象 object

8 任意精度的整数 (bigInt)

9 数据类型转换

9.1 数字 => 字符串

  • String(1)
  • (1).toString( )
  • 1..toString( )
  • 1+’’
  • ‘’+1

    9.2 字符串 => 数字

  • Number(‘1’)

  • parseInt(‘1’) / parseFloat(‘1’)
  • ‘1’ - 0

    9.3 x => 布尔

  • Boolean(x)

  • !!x

    9.4 x => 字符串

  • String(x)

  • x.toString()

10 变量声明

变量声明的时候, 既指定值, 又指定了数据类型, 比如
var a = 1 这个式子指定了值是1; 同时指定了数据类型是number, 因为1是number.

10.1 三种声明方式

  • var a = 1
  • let a = 1
  • const a = 1
  • 不能写成 a =1

区别:

  • var是过时的、不好用的方式;
  • let是新的, 更合理的方式;
  • const是声明时必须赋值, 且不能再改的方式;
  • 注意: a = 1 这种方式是错误的, 不准这样声明.

    10.2 let 声明

    规则:

  • 遵循块作用域, 即使用范围不能超出{ };

  • 不能重复申明;
  • 可以赋值, 也可以不赋值;
  • 必须先声明再使用, 否则报错;
  • 全局声明的let变量, 不会变成window的属性;
  • for循环配合let有奇效.

    10.3 const 声明

    规则:

  • 跟let几乎一样;

  • 只有一条不一样:声明时就要赋值, 赋值后不能改.