首页 > 其他分享 >如何判断一个值到底是什么类型

如何判断一个值到底是什么类型

时间:2022-08-31 17:12:23浏览次数:48  
标签:判断 到底 Object object toString 类型 call prototype type

Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值的类型。

var obj = {};
obj.toString() // "[object Object]"

上面代码调用空对象的toString方法,结果返回一个字符串object Object,其中第二个Object表示该值的构造函数。这是一个十分有用的判断数据类型的方法。

由于实例对象可能会自定义toString方法,覆盖掉Object.prototype.toString方法,所以为了得到类型字符串,最好直接使用Object.prototype.toString方法。通过函数的call方法,可以在任意值上调用这个方法,帮助我们判断这个值的类型。

Object.prototype.toString.call(value)

上面代码表示对value这个值调用Object.prototype.toString方法。

不同数据类型的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]"

利用这个特性,可以写出一个比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"

在上面这个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

 

标签:判断,到底,Object,object,toString,类型,call,prototype,type
From: https://www.cnblogs.com/chen-cheng/p/16643749.html

相关文章

  • 判断组合数奇偶
    结论先说结论对于组合数\(C^k_n\),若n&k==k,则其为奇数,否则,其为偶数。证明\(C^k_n=\frac{n!}{k!(n-k)!}\)我们用a表示n!中因子2的个数b表示k!中因子2的个数c表示(n-k)!......
  • 说一说JS数据类型有哪些,区别是什么?
    JS数据类型分为两类:一类是基本数据类型,也叫简单数据类型,包含7种类型,分别是Number、String、Boolean、BigInt、Symbol、Null、Undefined。另一类是引用数据类型也叫复杂数......
  • Redis-------String类型常用命令
    String类型的常见命令String的常用命令有:命令描述set<key><value>设置键值对,成功返回1,失败返回0,key值已经存在则覆盖原值get<key>根据key返回对应的valu......
  • 容器类型转换
    1、tuple()将某个序列转换成元组2、list()将某个序列转换成列表3.set()将某个列表转换成集合注意:集合可以快速完成列表去重集合不支持下标list1=[10,20......
  • Java入门-基础语法(数据类型转换)
    类型转换运算中不同类型的数据先转化为同一类型,然后进行运算。(byte<short<char<int<long<float<double)强制转换:由高到低(类型)变量名自动转换:由低到高注意事项:不能把......
  • 工具函数(JavaScript)——如何判断设备是不是移动端
    浏览器有一个Navigator接口,表示用户代理的状态和标识。Navigator.userAgent可以知道客户端的设备类型。请求的请求标头有一个user-agent字段,内容中包含了设备型号的信......
  • 基础数据类型之数字和字符串
    1.数字类型数字类型的数据可以相互的进行+-/*、也可以进行相互的比较(<>=)1.1整型intage=18记录年龄等整数print(type(age))#int类型int()方法可以将其他类型的数据转换......
  • css的布局方式,常见的CSS布局类型
    常见的单列布局有两种:header,content和footer等宽的单列布局header与footer等宽,content略窄的单列布局实现第一种方式很简单,可以将header,content,footer......
  • scrum敏捷任务协作,到底是用电子看板还是物理看板?
    ​无可厚非,敏捷项目的最终成败与看板本身是物理的还是电子的没有直接关系。所以本文不是讨论敏捷项目的成败,而是讨论:如果你用了看板,那么哪种看板更适合你?笔者基于辅导过......
  • python 日志写入文件,参数说明及动态判断文件是创建还是追加
    importloggingimportos'''格式符含义%(levername)s日志级别名称%(pathname)s当前执行程序的路径(即脚本所在的位置)%(filename)s执行脚本程序......