JS中的数据类型
==7种(四基两空一对象)==
1 数字 number (64位浮点数)
1.1 特殊值
- 正0和负0
都等于0,要严谨
- 无穷大
Infinity、+Infinity、-Infinity
- 无法表示的数字
NaN(Not a Number),但它是一个数字
1.2 64位存储一个number
- 符号占1位
- 指数占11位(-1023~1024)
- 有效数字占52位
1.3 范围和精度
- 范围(忽略符号位)
- 指数拉满、有效数字拉满,得到最大二进制数字Number.MAX_VALUE: 1.7976931348623157e+308
- 指数负方向拉满、有效数字最小1,得到最小值Number.MIN_VALUE: 5e-324
- 精度(有效数字)
最多只能到52+1个二进制位表示有效数字,2^53 对应的十进制是 9 后面 15 个零。所以15位有效数字都能精确表示,16位有效数字如果小于 90 开头,也能精确表示9110000000000001 就存不下来。
2 字符串 string
2.1 多行字符串
- 如果你想要在字符串里回车
let s = `这样是
可以的
用反引号很容易做到`
2.2 通过下标读取字符
- 注意 index 到 length
let s = 'hello';
s[4] // 'o'
s[5] // undefined,居然不报错
2.3 base64 转码
- window.btoa
正常字符串转为 Base64 编码的字符串
- window.atob
Base64 编码的字符串转为原来的字符串
3 布尔 bool
3.1 下列运算符会得到 bool 值
- 否定运算
!value
- 相等运算
1 == 2、1 != 2、3 === 4、3 !== 4
- 比较运算
1 > 2、1 >= 2、3 < 4、3 <= 4
3.2 五个 falsy 值
- falsy 就是相当于 false 但又不是 false 的值
分别是 undefined null 0 NaN ''
4. 符号 symbol
不怎么常用的数据类型
- Symbol 生成一个全局唯一的值
5. 空 null
6. 空 undefined
6.1 undefined null的区别
没有本质区别
- 如果一个变量声明了,但没有赋值,那么默认值就是 undefined,而不是 null
- 如果一个函数,没有写 return,那么默认 return undefined,而不是 null
- 前端程序员习惯上,把非对象的空值写为 undefined,把对象的空值写为 null。==但仅仅是习惯上而已==
7. 对象 object
变量声明
1. 三种声明方式
var a = 1
let a = 1
const a = 1
1.1 区别
- var 是过时的、不好用的方式
- let 是新的,更合理的方式
- const 是声明时必须赋值,且不能再改的方式
1.2 var变量提升
1.3 let声明
1.3.1 规则
- 遵循块作用域,即使用范围不能超出 { }
- 不能重复申明
- 可以赋值,也可以不赋值
- 必须先声明再使用,否则报错
- 全局声明的 let 变量,不会变成 window 的属性
- for 循环配合 let 有奇效
1.3.2 对let的理解
1.4 const声明
1.4.1 规则
- 跟 let 几乎一样
- 只有一条不一样:声明时就要赋值,赋值后不能改
类型转换
- number => string
String(n)
n + ''
- string => number
Number(s)
parseInt(s) / parseFloat(s)
s - 0
- x => bool
Boolean(x)
!!x
- x => string
String(x)
x.toString()