JS 数据类型
简单
shell
# 分类
JS 数据类型可以分为两种:基础类型和引用类型
# 基础类型
基础类型有七种:string、number、boolean、undefined、null、symbol (ES6新增)、bigint (ES2020新增)
# 引用类型
JS 引用类型统称为对象类型,主要包含普通对象、数组、函数;
另外还有内置特殊对象:Date 日期、RegExp 正则、Set 集合、Map 映射、WeakSet、WeakMap。
# 存储位置
基础类型的数据存储在栈中
引用类型的数据存储在堆中,地址指针存储在栈中拓展
shell
# 引用类型关键
JS 里所有引用类型,底层全都是对象 Object
# Symbol
Symbol是ES6新增的表示唯一不可变的值,通常用于对象属性的键
# null
null 是空对象指针,通常用于手动清空变量值(表示有意为之的空值)
# undefined
变量声明后未赋值
函数参数未提供
函数没有返回值时的默认返回
对象不存在的属性
# null 与 undefined
null == undefined; # true
null === undefined; # false
# 注意
Promise、Proxy、Error 属于内置构造对象,不属于基础数据类型分类。不能列入到引用类型中bigint 类型
shell
# bigint
是ES2020新增的表示大整数,常用于处理 大于 2^53 - 1 = 9,007,199,254,740,991 的整数,约为 9007 兆,特点是以 n 结尾的整数
# BigInt 的使用场景
一般用于表示大于 2^53 - 1 的整数,因为用 number 类型表示这么大的数字会造成精度丢失,主要用于需要处理非常大整数的场景,如加密、大数计算等。
# BigInt 有两种创建方式
const bigInt = 1234567890123456789012345678901234567890n;
const bigInt = BigInt("1234567890123456789012345678901234567890");
# BigInt 运算注意事项:
- 支持所有数字运算符,比如:加减乘除等,
- 除法会截断小数部分,比如:10n / 3n 的结果是 3n
- 不能与 Number 混合运算,需要使用 Number() 统一转化为 number 类型,或者使用 BigInt() 统一转化为 BigInt 类型再计算
- 使用 JSON.stringify()序列化的时候,如果包含BigInt类型会报错,解决方式,把所有的BigInt类型通过 .toString() 转化字符串,转化后自动去掉 n