当前位置: 首页 > 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.cnnetsun.cn/news/2988710.html

相关文章:

  • 好用的Windows软件!全局鼠标增强工具!能实现全局鼠标手势、触发角、边缘滚动、窗口拖动与管理等功能!鼠标便捷实用工具
  • 【深度解析】GPT-5.6推理预算升级与复杂Agent代码生成实战
  • 基于NXP P2020DS平台的嵌入式Linux系统开发全流程解析
  • OpenCore Legacy Patcher终极指南:3个简单步骤让老Mac免费升级最新macOS
  • 3.38亿元!3D打印大单背后,无人机发动机开始批量化
  • OpenRGB终极指南:一个免费开源软件统一管理所有RGB设备,告别品牌软件混乱
  • 绝区零自动化终极指南:3分钟上手全自动日常任务解放双手
  • DVWA靶场CSRF攻防实战:从漏洞利用到防御加固
  • 3个步骤掌握Dango-Translator:让外文内容触手可及的实时翻译神器
  • 轻量级音乐理解模型TinyMU:229M参数实现高效音乐推理
  • Path of Building PoE2终极珠宝构建指南:从基础到高级配置全解析
  • Lector:基于Qt的终极开源电子书阅读器完全指南
  • 淘宝运营完整实操指南(新店/老店通用)
  • ER-Save-Editor:让《艾尔登法环》存档管理变得像游戏一样简单
  • Rufus:Windows 11安装神器,轻松绕过TPM限制的终极指南
  • 视频扩散模型加速实战:高效注意力、模型压缩与缓存优化
  • 极简架构设计:减法工程学的五条纪律与落地验证
  • React 项目集成 TypeScript 的工程化实践与避坑指南
  • 实战指南:如何高效使用AI代理开发工具包构建智能应用
  • GTA IV终极修复方案:用FusionFix让你的经典游戏重获新生
  • DSP56720/21 EMC配置实战:GPCM与SDRAM时序详解与调试
  • ATmega406 ADC三大难题:低温失效、共模偏移与参考电压尖峰解决方案
  • 基于大语言模型的自动定理证明辅助系统DAP设计与实现
  • TV Bro:如何用三个核心技术解决智能电视浏览器的交互难题?
  • Obsidian模板库:从信息碎片到知识系统的结构化路径
  • 深入解析NXP Kinetis KE1xF Flash安全机制与核心命令实战
  • AVR32 TCA定时器与事件系统:从硬件联动到低功耗设计
  • XiaoMusic深度解析:构建小爱音箱专属音乐服务器的完整指南
  • Python map函数本质与实战:惰性映射、数据流管道与避坑指南
  • 3步让你的老Mac免费升级到最新macOS:告别官方淘汰限制