数据类型分类
基本数据类型【也叫值类型】
- number、string、undefined、null、boolean、symbol、bigint
- symbol的作用
- 给对象设置唯一值类型的属性
- vuex/redux中需要派发许多行为标识,可以将行为标识统一管理,基于symbol类型保证行为标识的唯一性
- 将Symbol作为对象,它的静态方法可以作为许多JS知识的底层机制
- Symbol.toPrimitive :获取原始值
- Symbol.toStringTag :数据类型检测的底层机制
- Symbol.iterator :迭代器规范的处理机制
- Symbol.hasInstance
- Symbol.asyncIterator
- bigint的使用场景
- 若某一数据大于浏览器的最大安全数字Number.MAX_SAFE_INTEGER,则进行运算的时候,结果会出现偏差
- 需求:服务器端传递到客户端的数据(通常以字符串的方式传递),且这个数据超过浏览器的最大安全数字,要求基于这个数据进行运算,为保证结果的准确性,请给出解决方案
- 解决方案:客户端中将参与运算的数据都转换为bigint类型,则得到的结果也是bigint类型。将得到的结果在转换为字符串,返回给服务器端
- 若某一数据大于浏览器的最大安全数字Number.MAX_SAFE_INTEGER,则进行运算的时候,结果会出现偏差
假设服务器端传递的数据为 2^54,进行运算的数据为2^54和13
则 (BigInt(2^54) + BigInt(13)).toString
引用数据类型
- 标准对象:object
- 标准特殊对象:Array、Date、Math、Regx...
- 非标准特殊对象:Number、String、Boolean...
- 可执行对象:function
tips
-
对象的属性是字符串类型的,若想设置别的类型的属性名,需要用[]包起来。
(1) 访问对象的属性的方式
- 属性名是一个变量,访问方式为:obj[变量名]
- 属性名是一个字符串,访问方式:obj.字符串或obj[字符串]
let sym = Symbol('AA')
let obj = {
age:18,
[sym]:500
}
console.log(obj.age) //18
console.log(obj[age]) //18
console.log(obj[sym]) //500
- 获取对象中所有的属性的方式 (1) for...in...
for(let key in obj){
console.log(key) //不能获取symbol类型的属性
}
(2)Object.keys(obj):获取对象的所有非symbol类型的属性,得到的是一个由这些属性组成的数组 Object.getOwnPropertySymbol(obj):获取对象中所有symbol类型的属性
let keys = Object.keys(obj)
keys = keys.concat(Object.getOwnPropertySymbol(obj)) //这样就得到了对象obj中所有类型的属性
(3) Reflect.ownKeys(obj):获取对象中所有类型的属性,无论什么类型的都可以【得到的是一个由属性组成的数组】