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

HarmonyOS TypeUtil 基础类型检测详解:isBoolean/isNumber/isString/isObject/isArray 完整教程

文章目录

    • 背景
      • 方法总览
      • 为什么需要 TypeUtil?
      • isBoolean — 判断布尔值
      • isNumber — 判断数字
      • isString — 判断字符串
      • isObject — 判断对象
      • isArray — 判断数组
      • isFunction — 判断函数
      • isResource / isResourceStr — HarmonyOS 特有!
      • 实际使用示例
      • 总结对比
      • 写在最后

背景

近期发现一款很有意思的HarmonyOS 三方库, 地址 @pura/harmony-utils(V1.4.0) , 作者是"桃花镇童长老", 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦

案例demo导航展示

↓↓↓↓↓↓接下来言归正传 ↓↓↓↓

方法总览

为什么需要 TypeUtil?

先看看typeof的局限性:

typeof true → 'boolean' ✓ typeof 42 → 'number' ✓ typeof 'hello' → 'string' ✓ typeof null → 'object' ✗(应该是null) typeof [] → 'object' ✗(应该是array) typeof new Date → 'object' ✗(应该是date)

TypeUtil解决的就是这些问题,每个类型都有专属的判断方法,返回true/false,精准可靠。

isBoolean — 判断布尔值

this.Btn('isBoolean(true) → true','#4A90E2',()=>{this.addLog(`isBoolean(true) →${TypeUtil.isBoolean(true)}`);})this.Btn('isBoolean("true") → false','#4A90E2',()=>{this.addLog(`isBoolean("true") →${TypeUtil.isBoolean("true")}`);})

运行结果:

isBoolean(true) → true isBoolean("true") → false

字符串"true"不是布尔值,isBoolean返回false——这正是我们想要的精确判断。

isNumber — 判断数字

this.Btn('isNumber(42) → true','#5A8DEE',()=>{this.addLog(`isNumber(42) →${TypeUtil.isNumber(42)}`);})this.Btn('isNumber("42") → false','#5A8DEE',()=>{this.addLog(`isNumber("42") →${TypeUtil.isNumber("42")}`);})

运行结果:

isNumber(42) → true isNumber("42") → false

字符串"42"不是数字类型,返回false

isString — 判断字符串

this.Btn('isString("hello") → true','#27AE60',()=>{this.addLog(`isString("hello") →${TypeUtil.isString("hello")}`);})this.Btn('isString(123) → false','#27AE60',()=>{this.addLog(`isString(123) →${TypeUtil.isString(123)}`);})

运行结果:

isString("hello") → true isString(123) → false

isObject — 判断对象

interfaceSampleObj{a:number;}this.Btn('isObject({a:1}) → true','#E67E22',()=>{constobj:SampleObj={a:1};this.addLog(`isObject({a:1}) →${TypeUtil.isObject(obj)}`);})

运行结果:

isObject({a:1}) → true

注意:isObject纯对象返回true,但不包含数组(数组有专属的isArray)。

isArray — 判断数组

this.Btn('isArray([1,2,3]) → true','#E74C3C',()=>{this.addLog(`isArray([1,2,3]) →${TypeUtil.isArray([1,2,3])}`);})this.Btn('isArray({}) → false','#E74C3C',()=>{constobj:SampleObj={a:0};this.addLog(`isArray({}) →${TypeUtil.isArray(obj)}`);})

运行结果:

isArray([1,2,3]) → true isArray({}) → false

这就解决了typeof [] === 'object'的歧义问题,用isArray才是精准判断。

isFunction — 判断函数

this.Btn('isFunction(() => {}) → true','#9B59B6',()=>{this.addLog(`isFunction(()=>{}) →${TypeUtil.isFunction(()=>{})}`);})this.Btn('isFunction("str") → false','#9B59B6',()=>{this.addLog(`isFunction("str") →${TypeUtil.isFunction("str")}`);})

运行结果:

isFunction(()=>{}) → true isFunction("str") → false

isResource / isResourceStr — HarmonyOS 特有!

这是TypeUtil里比较有意思的两个方法,专门针对 HarmonyOS 的Resource类型:

// 判断是否是 Resource 对象($r() 返回的)this.Btn('isResource($r("app.string.app_name")) → true','#7B68EE',()=>{constres=$r('app.string.app_name');this.addLog(`isResource($r("app.string.app_name")) →${TypeUtil.isResource(res)}`);})this.Btn('isResource("plain string") → false','#7B68EE',()=>{this.addLog(`isResource("plain string") →${TypeUtil.isResource("plain string")}`);})// ResourceStr 可以是普通字符串或 Resource 对象this.Btn('isResourceStr("text") → true','#6C5CE7',()=>{this.addLog(`isResourceStr("text") →${TypeUtil.isResourceStr("text")}`);})this.Btn('isResourceStr($r("app.string.app_name")) → true','#6C5CE7',()=>{constres=$r('app.string.app_name');this.addLog(`isResourceStr($r(...)) →${TypeUtil.isResourceStr(res)}`);})

运行结果:

isResource($r("app.string.app_name")) → true isResource("plain string") → false isResourceStr("text") → true isResourceStr($r(...)) → true

区别在于:

  • isResource():只有$r()$rawfile()返回的 Resource 对象才是true
  • isResourceStr():普通字符串或 Resource 对象都算true(因为ResourceStr = string | Resource

这在封装通用组件时特别有用,组件参数可能接受ResourceStr,需要在内部判断到底是哪种类型来做不同处理。

实际使用示例

// 处理 ResourceStr 类型参数的通用函数functiongetText(value:ResourceStr):string{if(TypeUtil.isResource(value)){// 是资源引用,需要通过资源管理器获取returngetContext().resourceManager.getStringSync(valueasResource);}else{// 是普通字符串,直接返回returnvalueasstring;}}

总结对比

方法判断目标typeof 能替代吗?
isBoolean布尔值可以(typeof x === 'boolean'
isNumber数字可以(typeof x === 'number'
isString字符串可以(typeof x === 'string'
isObject纯对象不能(typeof null/[]也是object)
isArray数组不能(typeof [] 是 object)
isFunction函数可以(typeof x === 'function'
isResourceHarmonyOS Resource不能
isResourceStrstring 或 Resource不能

对于isObjectisArray,用 TypeUtil 比 typeof 可靠得多。

写在最后

类型检测看起来简单,但typeof的坑是真实存在的。TypeUtil 把这些边界情况都处理好了,用起来放心。

特别推荐记住isResourceisResourceStr——这是 HarmonyOS 特有的,处理$r()资源引用时经常用到。

http://www.zskr.cn/news/1450695.html

相关文章:

  • 如何用Path of Building PoE2实现流放之路2角色构建的终极指南:3步打造完美角色
  • HR做薪酬体系,必须先搞懂岗位价值评估
  • QueryExcel:基于NPOI的Excel批量数据检索系统架构解析
  • 如何用WeChatMsg永久保存微信聊天记录?你的数字记忆守护终极指南
  • 别再浪费你的游戏数据了!用Python+PyTorch实现DQN经验回放(附完整代码)
  • 发现用明道中文编程语言打包的hanoi.exe文件是22M,有点大啊,还能通过什么技术手段更小一些吗?(先维持原样)
  • Claude Code 平替来了?DeepSeek-TUI 保姆级安装教程
  • 性能相当于第四代骁龙8s
  • 双系统党必看:Ubuntu 18.04下Windows 10启动盘制作与bootmgfw.efi丢失修复全记录
  • QRemeshify:基于QuadWild算法的Blender四边形重拓扑技术深度解析
  • 多设备组网与Mesh网络入门
  • 仿真绿植绿化技术核心要点及服务商选择参考推荐:仿真绿植绿化工程/仿真绿植绿化电话/四川仿真绿植绿化/优选指南 - 优质品牌商家
  • GlosSI 入门指南:让 Steam 控制器在任意游戏和应用中畅玩
  • 别再死记硬背了!用Python手撸一个ID3决策树,从熵到分类器一次搞懂
  • 专为食品进出口打造的外贸ERP!智能生成发票、质检报告高效合规
  • 2026年近期如何筛选靠谱的气力输送设备优质厂家:以天顺机械为例的专业解析 - 2026年企业资讯
  • 告别编译噩梦:我在Ubuntu 18.04/20.04上为Xenomai 3.2.1打Linux 5.10.76补丁的五个关键抉择
  • ## 2026深圳全屋定制实测:西丽自有工厂木点点ENF套餐到底值不值? - 产品测评官
  • VoiceFixer语音修复工具:3种模式一键解决噪音、失真和低质量音频问题
  • 组织与交付 如何让产品 工程 合规 在 Agent 项目里不互相拖后腿
  • 三步永久保存微信聊天记录:WeChatMsg免费数据备份终极指南
  • 第41篇|补光与水印:效果选项如何参与最终照片记录
  • 别再手动对比了!Ubuntu 22.04上5分钟搞定Beyond Compare 4安装与汉化(附最新密钥获取方法)
  • 2026年Q2国内供应链软件企业实测评测:聚焦核心能力 - 优质品牌商家
  • 华为官网风格前端实战项目:纯原生HTML/CSS/JS实现,含首页、登录页与交互组件
  • 在终端中释放Qwen大模型潜能:5个场景掌握命令行交互核心技巧
  • GitHub-Store 开源应用商店,一键追踪安装更新
  • 三步把B站视频变成文字稿,这个免费工具让学习效率提升300%
  • 数字记忆守护者:如何用开源工具永久备份你的微信聊天记录
  • 01_制版厂质检员的困境