JS中的数据类型
| 数字 | number |
|---|---|
| 字符串 | string |
| 布尔 | bool |
| 符号 | symbol |
| 空 | undefined |
| 空 | null |
| 大整数 | bigint |
| 对象 | object |
数组、函数、日期不属于数据类型,它们属于object。
1. 数字 number
64位浮点数
写法
- 整数写法:1
- 小数写法:0.1
- 科学计数法:1.23e4
- 八进制写法:0123或00123或0o123
- 十六进制写法:0x3F或0X3F
- 二进制写法:0b11或0B11
特殊值
- 正0 和 负0:都等于0,要严谨
- 无穷大:Infinity、+Infinity、-Infinity
- 无法表示的数字:NaN(Not a Number) ,但它是一个数字
JS数字的存储形式
- 符号占1位
- 指数占11位(-1023~1024)
- 有效数字占52位(开头的1省略)
范围(忽略符号位)
- 指数拉满、有效数字拉满,得到最大二进制数字 Number.MAX_VALUE:1.7976931348623157e+308
- 指数负方向拉满、有效数字最小1,得到最小值 Number.MIN_VALUE:5e-324
精度(有效数字)
- 最多只能到52+1个二进制位表示有效数字
- 2^53对应的十进制是9后面15个零,所以15位有效数字都能精确表示
- 16位有效数字如果小于90开头,也能精确表示
- 9110000000000001就存不下来
2. 字符串 string
每个字符两个字节
写法
- 单引号:'你好'
- 双引号:"你好"
- 反引号:`你好` 引号不属于字符串的一部分,就像书名号不属于书名的一部分一样。
转义
- \` 表示 `
- \" 表示 "
- \n 表示换行
- \r 表示回车
- \t 表示tab制表符
- \\ 表示 \
- \uFFFF 表示对应的Unicode字符
- \xFF 表示前256个Unicode字符
多行字符串
字符串的长度
- string.length
'123'.length // 3
'\n\r\t'.length // 3
''.length // 0
' '.length // 1
通过下标读取字符
- string[index]
let s = 'hello';
s[0] // "h" 第一个字符
base64转码
- window.btoa:正常字符串转为Base64编码的字符串
- window.atob:Base64编码的字符串转为原来的字符串
3. 布尔 boolean
真或假,只有两个值,ture 和 false。
下列运算符会得到bool值
- 否定运算:
!value - 想等运算:
1 == 2、1 != 2、3 === 4、3 !== 4 - 比较运算:
1 > 2、1 >= 2、3 < 4、3 <= 4 - if 语句常常需要判断真假:
if (value) {...} else {...} - 五个falsy值:falsy 就是相当于 false 但又不是 false 的值,分别是undefined null 0 NaN ''
4. undefined 和 null 两种空类型
区别
没有本质区别。
- 细节一:如果一个变量声明了,但没有赋值,那么默认值就是undefined,而不是null。
- 细节二:如果一个函数,没有写return,那么默认return undefined,而不是null。
- 细节三:前端程序员习惯上,把非对象的空值写为undefined,把对象的空值写为null。
变量声明
三种声明方式
var a = 1 // 过时、不好用let a = 1 // 新的,更合理const a = 1 // 声明时必须赋值,且不能更改
let 声明规则
- 遵循块作用域,即使用范围不能超出{}
- 不能重复申明
- 可以赋值,也可以不赋值
- 必须先声明再使用,否则报错
- 全局声明的 let 变量,不会变成 window 的属性
- for 循环配合 let 有奇效
const 声明规则
- 跟 let 几乎一样
- 只有一条不一样:声明时就要赋值,赋值后不能改
变量声明,指定值,同时也指定了类型,但是值和类型都可以随意变化。
name 和 'name' 的区别
- name 是变量,值可变,可能是'name',也可能是'hello'
- 'name'是字符串常量,'name'只能是'name',不能是其他值
类型转换
- 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()