当前位置: 首页 > 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.jsqmd.com/news/939291/

相关文章:

  • 华硕笔记本终极性能控制:G-Helper轻量化解决方案完全指南
  • 4G Cat.1 通信模组怎么选?有哪些关键参数?
  • 如何用Path of Building PoE2实现流放之路2角色构建的终极指南:3步打造完美角色
  • 从零打造3D打印井字棋机器人:Arduino与舵机运动控制实战
  • HR做薪酬体系,必须先搞懂岗位价值评估
  • QueryExcel:基于NPOI的Excel批量数据检索系统架构解析
  • ## 实地探访深圳源头工厂:木点点整装ENF闭口套餐真实落地情况 - 产品测评官
  • 做淘宝虚拟产品,稳定虚拟货源下载渠道怎么找?
  • HarmonyOS ArkTS 精确类型检测进阶:TypedArray 系列与容器类型完全指南
  • 代发货订单履行:完整指南
  • 如何用WeChatMsg永久保存微信聊天记录?你的数字记忆守护终极指南
  • 经典蓝牙(BR/EDR)开发实战
  • 别再浪费你的游戏数据了!用Python+PyTorch实现DQN经验回放(附完整代码)
  • 发现用明道中文编程语言打包的hanoi.exe文件是22M,有点大啊,还能通过什么技术手段更小一些吗?(先维持原样)
  • Claude Code 平替来了?DeepSeek-TUI 保姆级安装教程
  • 底轴旋转坝技术深度解析:钢坝、钢闸门、防洪闸、合页坝、底轴旋转坝、弧形闸门、拦河坝、景观坝、智能一体化闸门、气动浮体坝选择指南 - 优质品牌商家
  • 性能相当于第四代骁龙8s
  • HarmonyOS ArkTS 判断 Promise 与异步函数的正确姿势:TypeUtil 实战教程
  • 国内工业级3D打印代加工服务商实测排行 - 优质品牌商家
  • Windows宝塔面板启动卡死?别急着重装,先试试这个服务修复大法
  • 双系统党必看:Ubuntu 18.04下Windows 10启动盘制作与bootmgfw.efi丢失修复全记录
  • QRemeshify:基于QuadWild算法的Blender四边形重拓扑技术深度解析
  • HarmonyOS 拉起系统浏览器与短信界面:WantUtil.toWebBrowser 与 startMMS 实战
  • 请结合以下说明,先完成类似python的内置函数。 然后再去完成内置库(标准款) ‌内置函数‌
  • 2026年6月安庆黄金回收白银回收铂金回收权威排行榜TOP5:纯金+金条+银条+钯金 门店地址联系方式推荐
  • 基于Arduino Uno与七段数码管的简易任务计数器设计与实现
  • 2026数字展厅设计技术干货:数字孪生沙盘、数字孪生钢厂、数字展厅、数字沙盘、虚拟展厅、设备数字孪生、360全息柜选择指南 - 优质品牌商家
  • 多设备组网与Mesh网络入门
  • 从新手到高手:Smithbox游戏修改工具完全指南 [特殊字符]
  • 2026年更新:浙江生产线定制厂家选型指南与趋势洞察 - 2026年企业资讯