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省略).
1.2 数字范围(忽略符号位)
- 指数拉满、有效数字拉满,得到最大二进制数字;
- Number.MAX_VALUE: 1.7976931348623157e+308;
- 指数负方向拉满、有效数字最小1,得到最小值;
-
1.3 数字精度(有效数字)
最多只能到52+1个二进制位表示有效数字;
- 2^53对应的十进制是9后面15个零;
- 所以15位有效数字都能精确表示;
- 16位有效数字如果小于90开头,也能精确表示;
-
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
3.1 两个布尔值
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+’’
-
9.2 字符串 => 数字
Number(‘1’)
- parseInt(‘1’) / parseFloat(‘1’)
-
9.3 x => 布尔
Boolean(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
区别: