当前位置: 首页 > news >正文

JavaScript :检验数据类型的方法

JavaScript 检验数据类型的方法整理

方法适用场景准确度示例
typeof基础类型(string/number/boolean/undefined/symbol/bigint/function)⭐⭐⭐typeof null === 'object'
instanceof引用类型(对象/数组/函数/正则等)⭐⭐⭐⭐[] instanceof Array
Object.prototype.toString.call()所有类型,最准确⭐⭐⭐⭐⭐终极方案
constructor通过构造函数判断⭐⭐⭐可被篡改
Array.isArray()专门检测数组⭐⭐⭐⭐⭐推荐替代instanceof Array
Number.isNaN()专门检测 NaN⭐⭐⭐⭐⭐优于全局isNaN()
Number.isFinite()检测有限数⭐⭐⭐⭐⭐优于全局isFinite()
Number.isInteger()检测整数⭐⭐⭐⭐⭐-

1.typeof— 最常用但有坑

typeof "hello" // "string" typeof 123 // "number" typeof true // "boolean" typeof undefined // "undefined" typeof Symbol() // "symbol" typeof 10n // "bigint" typeof function(){} // "function" typeof null // "object" ❌ 经典 Bug typeof [] // "object" typeof {} // "object"

核心问题null和数组、对象都返回"object",无法区分。

2.instanceof— 检测引用类型

[] instanceof Array // true /abc/ instanceof RegExp // true function f(){} instanceof Function // true // ❌ 跨 iframe/window 会失效 // ❌ 无法检测基本类型

3.Object.prototype.toString.call()— 终极方案 ✅

Object.prototype.toString.call(null) // "[object Null]" Object.prototype.toString.call(undefined) // "[object Undefined]" Object.prototype.toString.call([]) // "[object Array]" Object.prototype.toString.call({}) // "[object Object]" Object.prototype.toString.call(/abc/) // "[object RegExp]" Object.prototype.toString.call(() => {}) // "[object Function]" Object.prototype.toString.call(123) // "[object Number]" Object.prototype.toString.call("abc") // "[object String]" Object.prototype.toString.call(true) // "[object Boolean]"

这是唯一能准确区分null和所有其他类型的方法。

4. 专用方法(ES6+ 推荐)

Array.isArray([]) // true ✅ 优先用这个 Number.isNaN(NaN) // true ✅ 全局 isNaN("abc") 也返回 true,这个不会 Number.isFinite(123) // true Number.isInteger(123.0) // true Number.isSafeInteger(9007199254740991) // true

实战推荐:封装一个万能判断

function getType(value) { return Object.prototype.toString.call(value).slice(8, -1); } getType(null) // "Null" getType([]) // "Array" getType({}) // "Object" getType(123) // "Number" getType("abc") // "String" getType(/abc/) // "RegExp"

选型建议

你要判断什么用什么
是否是数组Array.isArray()
是否是 NaNNumber.isNaN()
是否是基本类型typeof够用
是否是某个类的实例instanceof
要绝对准确Object.prototype.toString.call()

最常见的错误就是用typeof判断数组和null,记住这两个坑就够了。

http://www.jsqmd.com/news/1064251/

相关文章:

  • 2026年 北京办公室地毯清洗保洁TOP5榜单:专业除菌与深度清洁的全方位推荐指南 - 品牌发掘
  • SQL注入实战:从手工探测到自动化利用的完整渗透测试复盘
  • 2026 江苏全域发电机应急供电租赁服务商实地参考清单 - 海棠依旧大
  • 2026 年 6 月最新 | 初创创业咨询:杭州注册公司找哪家性价比高,全程代办无隐形收费 - 资讯纵览
  • 重庆中央空调维修哪家好?鑫诚制冷、嘉一制冷2026本地口碑榜 - 我叫一
  • 2026年实践,合韵汤泉与周边洗浴中心实际体验差异是什么? - 资讯纵览
  • Freyr-js 终极指南:一站式音乐下载解决方案的完整教程
  • 2026年 臭氧中和器厂家推荐榜:小型/台式/实验室/高效分解型,室温催化长寿命,半导体及科研优选品牌深度解析 - 品牌发掘
  • 一体化实验室承包模式:赋能实验室建设标准化落地 - 华川洁净
  • 杭州中央空调维修去哪找?鑫诚制冷、嘉一制冷2026本地口碑榜 - 我叫一
  • 探索SUSTechPOINTS:高效3D点云标注平台的完整实战指南
  • 医学图像分割后校准:TwinTrack双轨制处理标注不确定性与模型预测融合
  • Docker Compose 与 Redis Stack:从警告到解决方案
  • 2026年软件/SaaS商业服务GEO优化服务商选型指南:全意图能力成决定性分水岭 - GEO优化
  • 岳阳楼景区旁步行可达餐馆测评榜:湘味鱼鲜全在线 - 资讯纵览
  • 3步精通TranslucentTB:让Windows任务栏焕然一新的终极指南
  • 197、影像问题客诉处理体系:从用户反馈到复现、定位、修复的闭环流程
  • Akagi雀魂AI助手:从零开始掌握实时麻将分析利器
  • Django毕设项目: 基于 Django 的汽车销售数据统计分析平台车企销售数据可视化监测系统的设计与开发(源码+文档,讲解、调试运行,定制等)
  • 好用的Windows软件!全局鼠标增强工具!能实现全局鼠标手势、触发角、边缘滚动、窗口拖动与管理等功能!鼠标便捷实用工具
  • 2026年6月青岛黄岛区热门配镜最新店铺排行 实测维度全解析 - 起跑123
  • AI 驱动的日志分析:从海量日志到智能根因定位的工程实践
  • 万亿参数大模型分布式推理原理与硬件选型指南
  • 英国本地留学中介全攻略:类型、收费、避坑与选择指南 - 资讯纵览
  • 2026缙云木门定制,口碑厂家怎么选?
  • Ryzen AI NPU深度解析:XDNA2架构与Lemonade本地推理实战
  • 2026江门营业性演出许可证有没有正规代办渠道推荐 - 资讯纵览
  • 2026年甄选:小型罗茨风机生产厂家推荐排行榜 TOP1:源头工厂直供无中间商,现货速发支持定制 - 信息热点
  • Windows 11 LTSC 24H2安装微软商店完整指南:轻松恢复应用生态
  • AntiMicroX 终极指南:5分钟让任何游戏手柄控制你的电脑