JS数据类型

150 阅读2分钟

数据类型分类

基本数据类型【也叫值类型】

  • number、string、undefined、null、boolean、symbol、bigint
  • symbol的作用
    1. 给对象设置唯一值类型的属性
    2. vuex/redux中需要派发许多行为标识,可以将行为标识统一管理,基于symbol类型保证行为标识的唯一性
    3. 将Symbol作为对象,它的静态方法可以作为许多JS知识的底层机制
      • Symbol.toPrimitive :获取原始值
      • Symbol.toStringTag :数据类型检测的底层机制
      • Symbol.iterator :迭代器规范的处理机制
      • Symbol.hasInstance
      • Symbol.asyncIterator
  • bigint的使用场景
    1. 若某一数据大于浏览器的最大安全数字Number.MAX_SAFE_INTEGER,则进行运算的时候,结果会出现偏差
      • 需求:服务器端传递到客户端的数据(通常以字符串的方式传递),且这个数据超过浏览器的最大安全数字,要求基于这个数据进行运算,为保证结果的准确性,请给出解决方案
      • 解决方案:客户端中将参与运算的数据都转换为bigint类型,则得到的结果也是bigint类型。将得到的结果在转换为字符串,返回给服务器端
                假设服务器端传递的数据为 2^54,进行运算的数据为2^5413
                则 (BigInt(2^54) + BigInt(13)).toString

引用数据类型

  • 标准对象:object
  • 标准特殊对象:Array、Date、Math、Regx...
  • 非标准特殊对象:Number、String、Boolean...
  • 可执行对象:function

tips

  1. 对象的属性是字符串类型的,若想设置别的类型的属性名,需要用[]包起来。

    (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. 获取对象中所有的属性的方式 (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):获取对象中所有类型的属性,无论什么类型的都可以【得到的是一个由属性组成的数组】