javascript类型判断最佳实践
javascript有8种数据类型
值类型
- Number
- Null
- Undefined
- String
- Symbol
- Boolean
- BigInt
引用类型
- Object
- Array
- Function
判断数据类型有以下4种判断方法
第一种方式: typeof
typeof null ---> "object" typeof undefined ---> "undefined" typeof true | false ---> 'boolean' typeof 42 ---> 'number' typeof "42" ---> 'string' typeof { name : '1'} | [] ---> 'object' typeof Symbol ---> 'symbol' typeof ()=>{} ---> 'function' typeof void 0 ---> 'undefined'
第二种方式 instanceof 但是这种方式只适合判断object类型
instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上
详细介绍请看这里:javascript中的instanceof运算符
比如 : var arr = [] ; arr instanceof Array ---> true null instanceof Object ---> false [function] instanceof Object | Function --> true
第三种方式 Object.prototype.toString.call() 这种方式可以将全部的数据类型检测出来 也是 推荐的方式
因为toString是Object的原型方法, 而 Array Function 等都是Object的实例。都重写了toString 方法。返回的是类型的字符串
Object.prototype.toString.call(null) ---> [object Null] Object.prototupe.toString.call(undefined) ---> [object Undefined] Object.prototype.toString.call(123) ---> [object Number] Object.prototype.toString.call(true) ---> [object Boolean] Object.prototype.toString.call('123') ---> [object String] Object.prototype.toString.call({}) ---> [object Object] Object.prototype.toString.call([]) ---> [object Array] Object.prototype.toString.call(Math) ---> [object Math] Object.prototype.toString.call(function(){}) ---> [object Function] Objdec.prototype.toString.call(new Date) ---> [object Date] Object.prototype.toString.call(Symbol()) ---> [object Symbol]
第四种方式: constructor 判断对象的构造函。
1. null 是js 原型链的起点,没有构造函数 2. undefined 没有构造函数 3. [].constructor === Array ---> true 4. [string].constructor === String 5. [object].constructor === object 6. [number].constructor === Number 7. [symbol].constructor === Symbol 8. [function].constructor === Function 9. [new Date].constructor === Date 10. [RegExp].constructor === RegExp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?