基本数据类型及检测方法

25 阅读1分钟

1.数据类型

  • 基本类型

    • 已知5种:number,string,boolean,null,undefined
    • ES6以后新增:Symbol,BigInt

    知识点:Symbol.for(key),

    Symbol 指的是独一无二的值。每个通过 Symbol() 生成的值都是唯一的。

    数据类型之 Symbol、BigInt:juejin.cn/post/700075…

  • 引用类型

    • object:

      • 普通对象,数组对象,正则对象,Math对象,Date对象等
    • function

2.JS中的数据类型检测方案

  • typeof()

    • 判断基本数据类型,返回一个string类型的数据类型typeof 1 ==> "numble"

    • 暂时性死区:当前检测的a未被声明定义,检测时typeof a ==> "undefined" ,而不是报错

    • 特例:`typeof null ==> "object"

    • 优点:能够快速区分基本数据类型

      缺点:不能将Object、Array,Date,Null等区分,都返回objec,函数/类返回"function"

  • instanceof

    • 判断实例对象是否属于类:a instanceof A ==> true

    • 优点:能够区分Array、Object和Function,适合用于判断自定义的类实例对象

      缺点:Number,Boolean,String基本数据类型不能判断

  • Object.prototype.toString.call(xx) //逼格高,推荐使用

    • 优点:精准判断数据类型

      缺点:写法繁琐,建议进行封装

      let _toString = Object.prototype.toString;
      console.log(_toString.call(0));       //=>[object Number]
      
      
  • constructor

    • 构造函数:A 会生成有一个 prototype原型对象 ,默认所有的prototype原型对象会自动生成constructor属性,该属性值为构造函数本身。
    • 创建一个新的实例对象,实例对象的内部[[Prototype]]会被赋值为构造函数的原型对象。a.__proto__=== A.prototype ==>true
    • 实例与构造函数原型之间有直接的联系,但实例与构造函数之间没有
    • null/undefined是一个假值,也不是任何构造函数的实例,所以不存在原型,无法使用 constructor 判断类型。