数据类型检测的几种方法

typeof ()

返回结果为字符串。
这个方法适用于基本类型的检测,引用类型检测只能反映出是对象,不能检测出具体是什么类型的对象。
  • 基本类型
    • string,number,boolean,undefined可以正确检测。
    • null检测结果是object。null是空对象指针,变量不指向任何对象。需要回收的对象就设置为null。
  • 引用类型

    • 对象,数组,正则,日期检测结果都是object。
    • 函数检测结果是function。
  • Symbol检测结果就是symbol。

instanceof ()

检测实例是否属于某个类。返回结果是true/false。
只要是原型链上的类都会返回true。
原型prototype/__proto__的指向可能被改变,检测结果不准确。
基本类型值返回结果都是false,不适用。

constructor ()

类似于instanceof。返回也是true/false。
由于constructor也可以改写,所以检测结果也不准确。

Object.prototype.toString.call()

检测实例所属的类。
检测数据类型最准确的方法,基本类型,引用类型都适用。
返回结果是"[object 所属类信息]"。
可以是[object Object/Array/RegExp/Function/String/Number/Boolean/Null/Undefined/Symbol]

即使prototype原型被改写也不会影响判断。

String,Number,Boolean,Symbol原型上都有:

  • toString:转换为字符串
  • valueof:返回原始值

Array,RegExp,Function原型上都有:

  • toString:转换为字符串

Object原型上

  • toString:当前实例所属的类
  • valueof:返回原始值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。