• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
chenmeijiao
博客园    首页    新随笔    联系   管理    订阅  订阅
typeof方法重写(区分数组对象)

为什么要重写typeof方法?

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

     

观察上面的结果:

  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);
      }
    }
posted on 2019-12-18 16:59  chenmeijiao  阅读(540)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3