Mortal红尘 Mortal红尘
首页
  • 学习笔记

    • 前端
    • 后端
  • 《ES6教程》
  • 《Git教程》
  • 《JavaScript教程》
  • 《JavaScript文章》
  • 《TypeScript 从零实现 axios》
  • 《Vue教程》
  • 《Vue文章》
  • 《页面与效果》
  • 技术文档
  • GitHub技巧
  • Nodejs
  • Linux
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Mortal红尘

热爱各种技术的一枚憨憨前端
首页
  • 学习笔记

    • 前端
    • 后端
  • 《ES6教程》
  • 《Git教程》
  • 《JavaScript教程》
  • 《JavaScript文章》
  • 《TypeScript 从零实现 axios》
  • 《Vue教程》
  • 《Vue文章》
  • 《页面与效果》
  • 技术文档
  • GitHub技巧
  • Nodejs
  • Linux
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《ES6 教程》

  • 《Git》

  • 《JavaScript教程》

  • 《TypeScript 从零实现 axios》

  • 《Vue》

  • JavaScript文章

    • new命令原理
    • ES5面向对象
    • ES6面向对象
    • 多种数组去重性能对比
    • JS随机打乱数组
    • 判断是否为移动端浏览器
    • 将一维数组按指定长度转为二维数组
    • 防抖与节流函数
    • JS获取和修改url参数
    • 比typeof运算符更准确的类型判断
  • Vue文章

  • 页面

  • 知识库
  • JavaScript文章
xugaoyi
2020-04-13

比typeof运算符更准确的类型判断

# 比typeof运算符更准确的类型判断

不同数据类型的Object.prototype.toString方法返回值如下。

  • 数值:返回[object Number]。
  • 字符串:返回[object String]。
  • 布尔值:返回[object Boolean]。
  • undefined:返回[object Undefined]。
  • null:返回[object Null]。
  • 数组:返回[object Array]。
  • arguments 对象:返回[object Arguments]。
  • 函数:返回[object Function]。
  • Error 对象:返回[object Error]。
  • Date 对象:返回[object Date]。
  • RegExp 对象:返回[object RegExp]。
  • 其他对象:返回[object Object]。

这就是说,Object.prototype.toString可以看出一个值到底是什么类型。

Object.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"
1
2
3
4
5
6
7
8

利用这个特性,可以写出一个比typeof运算符更准确的类型判断函数。

var type = function (o){
    var s = Object.prototype.toString.call(o)
    return s.match(/\[object (.*?)\]/)[1].toLowerCase()
}
type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"
1
2
3
4
5
6
7
8
9
10
11

在上面这个type函数的基础上,还可以加上专门判断某种类型数据的方法。

var type = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

['Null',
 'Undefined',
 'Object',
 'Array',
 'String',
 'Number',
 'Boolean',
 'Function',
 'RegExp'
].forEach(function (t) {
  type['is' + t] = function (o) {
    return type(o) === t.toLowerCase();
  };
});

type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
编辑 (opens new window)
上次更新: 2024/12/19, 12:18:44
JS获取和修改url参数
Vue CLi3 修改webpack配置

← JS获取和修改url参数 Vue CLi3 修改webpack配置→

最近更新
01
TypeScript-概要
8月22日
02
TypeScript快速上手
8月22日
03
常用Git命令清单
11-18
更多文章>
Theme by Vdoing | Copyright © 2021-2025 Mortal红尘 | 黔ICP备2021006288号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×