typeof方法重写(区分数组对象)

为什么要重写typeof方法?

  typeof 可以准确的判断除object以外的基础数据类型,但不能区分object类型的具体类型,比如 Array 、Date、NULL、NaN 以及自定义类。

     typeof方法重写(区分数组对象)_第1张图片

观察上面的结果:

  1. typeof NaN的结果是number,可以通过isNaN()来判断(存在局限性,详情点击查看)
  2. typeof []的结果是object,可以通过Array.isArray()来判断(存在局限性,详情点击查看)
  3. typeof null的结果是object

重写typeof代码:

// 该方法不包含NaN的类型判断
    function myTypeOf (target) {
      var template = {
        '[object Array]': 'array', // 数组
        '[object Object]': 'object', // 对象
        '[object Number]': 'number - object', // 数据对象(用new Number()定义出来的)
        '[object Boolean]': 'boolean - object', // 用new Boolean()定义出来
        '[object String]': 'string - object' // 用new String()定义出来的
      }
      if (target === null) {
        return "null"
      } else if (typeof(target) === 'object') {
        // 返回object时具体区分
        var str = Object.prototype.toString.call(target);
        return template[str]
      } else {
        // 原始值
        return typeof(target);
      }
    }

你可能感兴趣的:(typeof方法重写(区分数组对象))