通用类型判断函数

1、typeof不能正确判断类型, typeof null 会等于 object。且对于对象,除了函数,都会转换成object (如数组)。


2、instance不能正确判断类型,对于对象,Array会被转换成Object,且不能区分string和boolean。


可使用Object.prototype.toString.call()

每个对象都有一个toString()方法,当要将对象表示为文本值或字符串的方式引用对象时,会自动调用该方法。默认情况下,从Object派生的每个对象都会继承toString()方法。若该方法再自定义对象中没有被覆盖,则toString返回[Object, type],type是对象类型。

Object.prototype.toString.call(new Date()) // [object Date]
Object.prototype.toString.call("nide") // [object String]
Object.prototype.toString.call(3) // [object Numer]
Object.prototype.toString.call(undefined) // [object Undefined]
Object.prototype.toString.call(null) // [object Null]


封装通用方法

var type = function(data) {
      var toString = Object.prototype.toString;
      var dataType =
        data instanceof Element
          ? "element" // 为了统一DOM节点类型输出
          : toString
              .call(data)
              .replace(/\[object\s(.+)\]/, "$1")
              .toLowerCase()
      return dataType
};

原文出处:https://juejin.im/post/5e16b8b2e51d456f60137a50

posted @ 2020-01-10 14:27  恒若  阅读(473)  评论(0)    收藏  举报