js中变量的类型分为基本数据类型和引用数据类型
基本数据类型有Numeber,String,Undefined,Null,Boolean,Symbol,BigInt
引用数据类型有Object(Array,Function等)
复制代码
1.typeof判断数据类型:
能够区分Numeber,String,,Boolean,Undefined,Symbol,BigInt,Object,Function
typeof的注意事项:---返回值是字符串格式的;
---typeof(NaN)-->"Number"
---typeof未定义的变量不会报错,返回"undefined"
复制代码

2.instanceof判断数据类型
instanceof运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。(判断的是 引用类型)
优点:能够区分Object,Function,Array
缺点:Numeber,String,,Boolean不能区分
复制代码

3.Object.prototype.toString.call()
可以准确的判断变量的数据类型
ECMA里规范定义了Object.prototype.toString的行为:首先,取得对象的一个内 部属性[[Class]],然后依据这个属性,返回一个类似于”[object Array]”的字符 串作为结果(看过ECMA标准的应该都知道,[[]]用来表示语言内部用到的、外部不 可直接访问的属性,称为“内部属性”)。利用这个方法,再配合call,我们可以取得 任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的 目的。
复制代码

4. constructor
对象实例的constructor指向对象自身
例如obj.constructor == Object
但是,undefined和null没有constructor,由于constructor属性是可以变更的,也会导致检测出的结果不正确。
复制代码
