ArkTS和TypeScript类似,string
和 String
,number
和 Number
之间有一些重要的区别:
基本类型与对象类型
-
基本类型 (
string
,number
):string
和number
是基本数据类型,用于表示原始值。- 例如:
let str: string = "Hello"; let num: number = 42;
-
对象类型 (
String
,Number
):String
和Number
是构造函数,用于创建相应的对象。- 例如:
let strObj: String = new String("Hello"); let numObj: Number = new Number(42);
主要区别
-
类型:
string
和number
是原始类型,直接表示值。String
和Number
是对象类型,包含方法和属性。
-
性能:
- 使用基本类型更高效,因为它们是原始值,不需要额外的内存开销。
- 对象类型会创建一个包装对象,可能会影响性能。
-
类型判断:
- 使用
typeof
进行类型判断时,string
和number
返回 “string” 和 “number”,而String
和Number
返回 “object”。 - 例如:
console.log(typeof str); // "string" console.log(typeof strObj); // "object"
- 使用
可以看到虽然s1和s2打印时输出结果一致,但是其类型其实是不同的:
我们来阅读一下官方文档中的这一段话体会一下区别:
Number类型
ArkTS提供number和Number类型,任何整数和浮点数都可以被赋给此类型的变量。
数字字面量包括整数字面量和十进制浮点数字面量。
整数字面量包括以下类别:
● 由数字序列组成的十进制整数。例如:0、117、-345
● 以0x(或0X)开头的十六进制整数,可以包含数字(0-9)和字母a-f或A-F。例如:0x1123、0x00111、-0xF1A7
● 以0o(或0O)开头的八进制整数,只能包含数字(0-7)。例如:0o777
● 以0b(或0B)开头的二进制整数,只能包含数字0和1。例如:0b11、0b0011、-0b11
浮点字面量包括以下:
● 十进制整数,可为有符号数(即,前缀为“+”或“-”);
● 小数点(“.”)
● 小数部分(由十进制数字字符串表示)
● 以“e”或“E”开头的指数部分,后跟有符号(即,前缀为“+”或“-”)或无符号整数。
上面所有出现的整数字面量均为小写的number类型,而Number类型一半只能由new Number()获得。
下面来看一个Number()的用法:(这里要注意和parseInt的区别)
let numStr1: string = '110'
let numStr2: string = "0x110"
// 不可被parseInt直接识别
let numStr3: string = "0o110"
let numStr4: string = '0b110'
// Number可以将字符串转为可用于计算的十进制数
console.log(Number(numStr1).toString()) // 110
console.log(Number(numStr2).toString()) // 272
console.log(Number(numStr3).toString()) // 72
console.log(Number(numStr4).toString()) // 6
// 小心parseInt的用法
console.log(parseInt(numStr1,10).toString()) // 110
console.log(parseInt(numStr2,16).toString()) // 272
console.log(parseInt(numStr3,8).toString()) // 0,没有正确解析
console.log(parseInt(numStr4,2).toString()) // 0,没有正确解析