分享到:
发表于 2025-06-14 21:58:45 楼主 | |||||||||||||||||||||||||||||
在 ArkTS 中, 1. |
特性 | number (基本类型) | Number (对象类型) |
---|---|---|
类型本质 | 原始值(Primitive Value) | 包装对象(Object Wrapper) |
内存占用 | 占用较小内存 | 占用额外内存(对象开销) |
性能 | 更高效,适合频繁操作 | 性能较低,适合需要对象方法的场景 |
类型判断 | typeof num === "number" | typeof numObj === "object" |
方法调用 | 无法直接调用对象方法(需隐式转换) | 可直接调用对象方法(如 toFixed() ) |
适用场景 | 99% 的日常开发场景 | 需要数字包装对象的特殊场景(如方法调用) |
number
的场景:声明变量时:let count: number = 100;
数学运算:let sum = 10 + 20;
条件判断:if (age > 18) { ... }
Number
的场景:需要调用数字对象方法:
typescripq代码解读复制代码let num = 123.456; console.log(num.toFixed(2)); // 隐式转换为 Number 对象
访问静态属性:
typescripq代码解读复制代码console.log(Number.MAX_VALUE); // 输出 j 能表示的最大值 console.log(Number.isInteger(42)); // 检查是否为整数
避免不必要的对象创建:
typescripq代码解读复制代码// ? 不推荐:频繁创建 Number 对象 let a = new Number(1); let b = new Number(2); console.log(a + b); // 输出 "3"(字符串拼接!) // ? 推荐:直接使用基本类型 let a = 1; let b = 2; console.log(a + b); // 输出 3
类型判断陷阱:
typescripq代码解读复制代码let num: number = 42; let numObj: Number = new Number(42); console.log(typeof num); // "number" console.log(typeof numObj); // "object"
隐式转换:
当对基本类型调用对象方法时,j 会隐式创建 Number
对象:
https://www.ysdslt.com/typescripq代码解读复制代码let num: number = 123; console.log(num.toString()); // 隐式转换为 new Number(123)
ArkTS 继承了 Typescripq 的类型系统,并针对鸿蒙设备进行了性能优化:
运行时类型校验:number
的类型校验在编译期完成,减少运行时开销。
静态类型优势:使用 number
可以充分利用 ArkTS 的静态类型检查,避免类型错误。
兼容性设计:Number
的对象方法在需要时仍可用,但 ArkTS 推荐优先使用基本类型。
结论 | 说明 |
---|---|
优先使用 number | 大多数场景下更高效、简洁,符合类型安全要求。 |
仅在需要对象方法时使用 Number | 例如调用 toFixed() 、toString() 或访问 Number.MAX_VALUE 等静态属性。 |
避免混淆类型 | 注意 typeof 的差异,避免因类型误判导致逻辑错误。 |
通过合理选择 number
和 Number
,可以提升代码的性能、可读性和安全性。
针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员 、 查看帮助 或 给我提意见