String 对象用于处理文本(字符串)。
在 TypeScript 中,字符串可以通过 String 对象来创建,即使用 new String(…) 的方式。
不过,通常不建议使用 String 对象,而是直接使用字符串字面量,因为 String 对象会带来一些性能和类型上的问题。
1 |
var txt = new String("string"); |
或者更简单方式:
1 |
var txt = "string"; |
String 对象和字符串字面量在类型上是不同的:
string
,用于直接存储字符串值。String
对象是 String
类型,实际上是一个对象,而非原始的字符串值。
1 2 3 4 5 |
let strLiteral: string = "Hello"; let strObject: String = new String("Hello"); console.log(typeof strLiteral); // 输出:"string" console.log(typeof strObject); // 输出:"object" |
在 TypeScript 中,string 字面量类型和 String 对象类型不完全兼容。
例如,string 类型的变量无法直接使用 String 对象的方法,反之亦然。因此,通常情况下不需要使用 String 对象。
1 2 3 4 5 6 |
let strLiteral: string = "Test"; let strObject: String = new String("Test"); console.log(strLiteral === strObject); // 输出:false,内容相同,类型不同 console.log(strLiteral == strObject); // 输出:true,内容相同 console.log(strLiteral === strObject.valueOf()); // 输出:true,将对象转为原始字符串后比较 |
strLiteral 是原始字符串类型(string),而 strObject 是 String 对象类型(String)。这意味着它们的类型不同。
以上代码转为 JavaScript 代码为:
1 2 3 4 5 |
var strLiteral = "Test"; var strObject = new String("Test"); console.log(strLiteral === strObject); // 输出:false,内容相同,类型不同 console.log(strLiteral == strObject); // 输出:true,内容相同 console.log(strLiteral === strObject.valueOf()); // 输出:true,将对象转为原始字符串后比较 |
下表列出了 String 对象支持的属性:
序号 | 属性 & 描述 | 实例 | ||||
---|---|---|---|---|---|---|
1. | constructor对创建该对象的函数的引用。 |
输出结果:
|
||||
2. | length返回字符串的长度。 |
|
||||
3. | prototype允许您向对象添加属性和方法。 |
|
下表列出了 String 对象支持的方法:
序号 | 方法 & 描述 | 实例 | ||
---|---|---|---|---|
1. | charAt()返回在指定位置的字符。 |
|
||
2. | charCodeAt()返回在指定的位置的字符的 Unicode 编码。 |
|
||
3. | concat()连接两个或更多字符串,并返回新的字符串。 |
|
||
4. | indexOf()返回某个指定的字符串值在字符串中首次出现的位置。 |
|
||
5. | lastIndexOf()从后向前搜索字符串,并从起始位置(0)开始计算返回字符串最后出现的位置。 |
|
||
6. | localeCompare()用本地特定的顺序来比较两个字符串。 |
|
||
7. | match()
查找找到一个或多个正则表达式的匹配。 |
|
||
8. | replace()替换与正则表达式匹配的子串 |
|
||
9. | search()检索与正则表达式相匹配的值 |
|
||
10. | slice()提取字符串的片断,并在新的字符串中返回被提取的部分。 | |||
11. | split()把字符串分割为子字符串数组。 |
|
||
12. | substr()从起始索引号提取字符串中指定数目的字符。 | |||
13. | substring()提取字符串中两个指定的索引号之间的字符。 |
|
||
14. | toLocaleLowerCase()根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射。 |
|
||
15. | toLocaleUpperCase()据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射。 |
|
||
16. | toLowerCase()把字符串转换为小写。 |
|
||
17. | toString()返回字符串。 |
|
||
18. | toUpperCase()把字符串转换为大写。 |
|
||
19. | valueOf()返回指定字符串对象的原始值。 |
|
在 TypeScript 中,使用 String 对象通常是不必要的,直接使用 string 字面量会更高效且符合 TypeScript 的最佳实践:
String
对象是一个引用类型,会占用更多内存,且每次创建一个新对象性能开销更大。string
字面量类型,保持代码的简洁和一致性。如果确实需要使用 String 对象的方法,可以通过 valueOf() 方法将对象转为原始字符串,然后继续处理。
通常情况下,TypeScript 推荐直接使用 string 字面量类型,以简化代码,提高性能,避免不必要的类型转换和复杂性。
1 2 3 4 5 |
let strLiteral: string = "Use string literals whenever possible!"; let strObject: String = new String("Avoid using String objects."); console.log(strLiteral); // 输出:"Use string literals whenever possible!" console.log(strObject.valueOf()); // 输出:"Avoid using String objects." |
from: https://www.runoob.com/typescript/ts-string.html