博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js类型判断
阅读量:4869 次
发布时间:2019-06-11

本文共 2067 字,大约阅读时间需要 6 分钟。

代码

let class2Type = {}let dataType = ['Boolean', 'Number', 'String', 'Function',  'Array', 'Date', 'RegExp', 'Object', 'Error']dataType.forEach((name, i) => {  class2Type['[object ' + name + ']'] = name.toLowerCase()})// 类型判断function type(obj) {  if (obj === null || obj === undefined) {    return String(obj)  }  return typeof obj === 'object' || typeof obj === 'function' ?    class2Type[class2Type.toString.call(obj)] || 'object' :    typeof obj;}// 判断是不是函数function isFunction(obj) {  return typeof obj === 'function'}// 判断是不是数组function isArray(obj) {  if (Array.isArray) {    return Array.isArray(obj)  }  return type(obj) === 'array'}// 判断是不是window对象function isWindow(obj) {  return obj !== null && obj !== undefined && obj === obj.window}// 判断是不是类数组function isArrayLike(obj) {  let length = obj.length;  let type = type(obj)  return type === 'array' || type !== 'function' &&    (typeof length === 'number' && length > 0 && (length - 1) in obj)}

说明

  1. 判断是否是数组,又新的原生方法Array.isArray, 这里兼容了低版本浏览器
  2. window对象有一个window属性, 这个属性指向window本身,即window.window === window
  3. 类型判断使用typeof是不可靠的,

    Value               Class      Type-------------------------------------"foo"               String     stringnew String("foo")   String     object1.2                 Number     numbernew Number(1.2)     Number     objecttrue                Boolean    booleannew Boolean(true)   Boolean    objectnew Date()          Date       objectnew Error()         Error      object[1,2,3]             Array      objectnew Array(1, 2, 3)  Array      objectnew Function("")    Function   function/abc/g              RegExp     object (function in Nitro/V8)new RegExp("meow")  RegExp     object (function in Nitro/V8){}                  Object     objectnew Object()        Object     object

    为了判断出类型,可以使用Object.prototype.toString方法获取对象的[[Class]]值,

    Object.prototype.toString.call([])    // "[object Array]"Object.prototype.toString.call({})    // "[object Object]"Object.prototype.toString.call(2)    // "[object Number]"

    这样还不够,还需要单独处理nullundefined

转载于:https://www.cnblogs.com/liuding0304/p/7280562.html

你可能感兴趣的文章
linux ulimit
查看>>
P2024 [NOI2001]食物链(种类并查集)
查看>>
记忆化搜索
查看>>
Centos7配置SVN服务端
查看>>
耗电—Android
查看>>
Ubuntu/Linux网络配置常用命令
查看>>
css3实现钟表效果
查看>>
using SSIS script task to send email result
查看>>
python多线程批量下载远程图片
查看>>
OFS环境,删除Resource 时出现错误失败,应该如何继续
查看>>
window7下Word 2007报“Microsoft office word已停止工作“
查看>>
UML关系(泛化,实现,依赖,关联(聚合,组合))
查看>>
我收集的一些目标检测、跟踪、识别标准测试视频集和图像数据库
查看>>
asp.net后台导出excel的方法:使用System.Web.HttpContext.Current.Response导出excel
查看>>
java timer 使用:
查看>>
UITableView分隔线
查看>>
POJ_2479与POJ_2593 Maximum Sum
查看>>
cogs 2123. [HZOI 2015] Glass Beads
查看>>
HDU-1226 超级密码
查看>>
Java常用正则表达式
查看>>