typeof 运算符:
typeof 是一个操作符,用于返回一个字符串,表示未计算的操作数的类型。
它适合判断基本数据类型(如 number、string、boolean、undefined、symbol、function)以及函数类型。
对于引用类型(如对象、数组),typeof 一律返回 'object',无法区分具体类型。
对于 null,typeof 会返回 'object',这是一个历史遗留的bug。
instanceof 运算符:
instanceof 用于检测某个构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
它适用于检测对象是否属于特定的类或构造函数,如数组、日期、正则表达式等类型。
instanceof 只能检查对象类型,不能检查基本类型。
constructor 属性:
每个对象都有一个 constructor 属性,指向创建该对象的构造函数。
通过比较对象的 constructor 属性与构造函数,可以判断对象的类型。
但是,如果 constructor 属性被修改,会得到错误结果。
null 和 undefined 没有 constructor 属性。
Object.prototype.toString.call() 方法:
这是最通用和可靠的方法,可以准确识别所有的 JavaScript 内置类型,包括基本类型和复杂类型。
它通过调用对象内部的 [[Class]] 属性来获取类型信息。
Object.prototype.toString.call() 不受对象自身的 toString() 方法的影响,返回结果格式统一,方便解析。
Array.isArray() 方法:
专门用于判断一个值是否为数组类型。
与其他方法相比,它的兼容性稍差,但性能更好。
自定义函数:
可以通过编写自定义函数来实现更复杂的类型判断逻辑,结合上述多种方法的优点。
其他特定场景的判断方法:
例如,判断箭头函数、异步函数、类等特定类型的变量,可以结合 toString() 方法和其他特性进行判断。