JS有七种数据类型
五个基本, 两个空, 一个复杂
分别是:Number, String, Bool, Symbol, BigInt, undefined, null, Object
1 五种基本数据类型
1.1 数字 Number
JS用64位浮点数存储Number,其中符号占1位,指数占11位(-1023~1024),有效数字占52位
1.1.1 Number的特殊值
- 0的类型有
0、+0、-0,注意:
1/0或1/+0 === Infinity,1/-0 === -Infinity
- 无穷大,分为
Infinity、+Infinity、-Infinity - 无法表示的数字
NaN (Not a Number)但是NaN是一个数字,注意:
NaN === NaN // fasle
1.1.2 Number的范围和精度
Number.MAX_VALUE: 1.79e + 308 即 1.797x10^308
Number.MIN_VALUE: 5e - 324 即 5x10^-324
Number最多可以表示52+1=53个二进制数字,也就是15位整数,16位整数90开头也能精确表示,但是像9110000000000001就存不下来了
1.2 字符串 String
1.2.1 写法(ES6)
- 单引号
'你好' - 双引号
"你好" - 反引号
`你好`如果要在单引号里包含单引号怎么办?
it's ok 可以写成
'it\'s ok'或
"it's ok"或
`it's ok`
1.2.2 转义
\' 表示 '
\\" 表示"
\n表示换行
\r表示回车
\t表示制表符
1.2.3 多行字符串(回车)
let s = `这样是
可以
的
`
1.2.4 字符串长度
注意:
`\\\\\\`.length === 3
可以通过下标来读取字符string[index] 例如:
let str = 'hello'
str[0] // "h"
1.3 Symbol 符号(ES6)
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。
Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。例如:
let s = Symbol();
typeof s // "symbol"
1.4 布尔 Boolean
1.4.1 下列运算会得到bool值
- 否定运算
!value - 相等运算
1 !== 2 - 比较运算
1 > 2
1.4.2 五个falsy值
相当于是false但又不是false的值 分别是undefined、null、NaN、0、''
1.5 BigInt (ES6)
BigInt 可以表示任意大的整数。
2 null和undefined
习惯上,把非对象的空值写为undefined,把对象空值写为null
相同点:
- 在
if判断语句中,值都默认为false - 大体上两者都是代表
无不同点: - null转为数字类型值为
0,而undefined转为数字类型为NaN - 如果一个变量声明了但是没有赋值,这时默认值为
undefined - null是一个很特殊的对象,最为常见的一个用法就是作为参数传入(说明该参数不是对象)
- 设置为null的变量或者对象会被内存收集器回收
3 类型转换
3.1 Number 转 String
语法
- String(n)
- n +'' 例如
let n = 123
String(n) // "123"
n + '' // "123"
3.2 String 转 Number
语法
- Number(s)
- parseFloat(s)
- s - 0 例如
let str = "123"
Number(str) // 123
parseFloat(str) // 123
str - 0 // 123
3.3 X 转 Boolean
语法
- Boolean(x)
- !!x 例如
Boolean(1) // true
Boolean(0) // false
!!1 // true
!!0 // false
3.4 X 转 String
语法
- String(x)
- x.toString() 例如
true.toString() // "true"
注意1.toString()有bug,改为1..toString()或者(1).toString()