TypeScript String
In TypeScript ist String ein grundlegender Datentyp zur Darstellung von Textdaten. Er erbt und erweitert die String-Funktionen von JavaScript und fügt statische Typprüfung hinzu.
Syntax
var txt = new String("string");
Oder einfacher:
var txt = "string";
Zwei Erstellungsmethoden und ihre Kernunterschiede
Es gibt zwei Möglichkeiten, Strings in TypeScript zu erstellen, aber sie unterscheiden sich wesentlich in Typ, Leistung und Einsatzszenarien:
Methode 1: String-Literale (empfohlen)
Dies ist die gebräuchlichste und leistungsfähigste Methode in TypeScript/JavaScript. Sie erzeugt den primitiven String-Typ (string), der auch der Standard-String-Typ im Typsystem von TypeScript ist.
// 原始字符串(推荐使用) const txt1: string = "Hello TypeScript"; // 显式指定类型 const txt2 = "Hello JavaScript"; // 类型推导为 string
Methode 2: String-Objekt (nicht empfohlen)
Die Verwendung vonnew String()erzeugt den Wrapper-Objekttyp (String), der im Wesentlichen ein Objekt und kein primitiver Wert ist, was zu Typverwirrung und Leistungseinbußen führt.
// String 对象(不推荐)
const txtObj: String = new String("Hello Object"); // 类型为 String(对象)
String-Objekte und String-Literale unterscheiden sich im Typ:
- String-Literale sind ein primitiver Datentyp
string, wird verwendet, um String-Werte direkt zu speichern. StringDas Objekt ist vomStringTyp; es ist tatsächlich ein Objekt, nicht der primitive String-Wert.
Beispiel
let strObject: String = new String("Hello");
console.log(typeof strLiteral); // Ausgabe: "string"
console.log(typeof strObject); // Ausgabe: "object"
| Merkmal | String-Literal (string) | String-Objekt (String) |
|---|---|---|
| Typart | Primitiver Wert | Referenztyp (Objekt) |
| Leistung | Effizient, kein zusätzlicher Speicher-Overhead | Ineffizient, erzeugt Objektinstanzen |
| Typprüfung (TypeScript) | Entspricht den grundlegenden TS-Typspezifikationen | Typkonflikt (z. B. kann einer Variablen vom Typ string kein String-Objekt zugewiesen werden) |
| Vergleichsmethode | Vergleicht Werte direkt | Vergleicht Referenzadressen (erfordert valueOf(), um den primitiven Wert zu erhalten) |
Typkompatibilität zwischen String-Literalen und String-Objekten
In TypeScript sind der string-Literaltyp und der String-Objekttyp nicht vollständig kompatibel.
Beispielsweise kann eine Variable vom Typ string nicht direkt die Methoden eines String-Objekts verwenden, und umgekehrt. Daher ist es normalerweise nicht nötig, das String-Objekt zu verwenden.
Beispiel
let strObject: String = new String("Test");
console.log(strLiteral === strObject); // Ausgabe: false, gleicher Inhalt, unterschiedliche Typen
console.log(strLiteral == strObject); // Ausgabe: true, gleicher Inhalt
console.log(strLiteral === strObject.valueOf()); // Ausgabe: true, Vergleich nach Konvertierung des Objekts in einen primitiven String
strLiteral ist der primitive String-Typ (string), während strObject der String-Objekttyp (String) ist. Das bedeutet, dass ihre Typen unterschiedlich sind.
Der obige Code, nach JavaScript konvertiert, ist:
Beispiel
var strObject = new String("Test");
console.log(strLiteral === strObject); // Ausgabe: false, gleicher Inhalt, unterschiedliche Typen
console.log(strLiteral == strObject); // Ausgabe: true, gleicher Inhalt
console.log(strLiteral === strObject.valueOf()); // Ausgabe: true, Vergleich nach Konvertierung des Objekts in einen primitiven String
Eigenschaften des String-Objekts
Die folgende Tabelle listet die vom String-Objekt unterstützten Eigenschaften auf:
| Nein. | Eigenschaft & Beschreibung | Beispiel |
|---|---|---|
| 1. | constructor
Eine Referenz auf die Funktion, die das Objekt erstellt hat. |
var str = new String( "This is string" );
console.log("str.constructor is:" + str.constructor)
Ausgabe: str.constructor is:function String() { [native code] }
|
| 2. | length
Gibt die Länge des Strings zurück. |
var uname = new String("Hello World")
console.log("Length "+uname.length) // 输出 11 |
| 3. | prototype
Ermöglicht das Hinzufügen von Eigenschaften und Methoden zu einem Objekt. |
function employee(id:number,name:string) {
this.id = id
this.name = name
}
var emp = new employee(123,"admin")
employee.prototype.email="[email protected]" // 添加属性 email
console.log("员工号: "+emp.id)
console.log("员工姓名: "+emp.name)
console.log("员工邮箱: "+emp.email)
|
String-Methoden
Die folgende Tabelle listet die vom String-Objekt unterstützten Methoden auf:
| Nein. | Methode & Beschreibung | Beispiel |
|---|---|---|
| 1. | charAt()
Gibt das Zeichen an der angegebenen Position zurück. |
var str = new String("EXAMPLE");
console.log("str.charAt(0) 为:" + str.charAt(0)); // R
console.log("str.charAt(1) 为:" + str.charAt(1)); // U
console.log("str.charAt(2) 为:" + str.charAt(2)); // N
console.log("str.charAt(3) 为:" + str.charAt(3)); // O
console.log("str.charAt(4) 为:" + str.charAt(4)); // O
console.log("str.charAt(5) 为:" + str.charAt(5)); // B
|
| 2. | charCodeAt()
Gibt den Unicode-Wert des Zeichens an der angegebenen Position zurück. |
var str = new String("EXAMPLE");
console.log("str.charCodeAt(0) 为:" + str.charCodeAt(0)); // 82
console.log("str.charCodeAt(1) 为:" + str.charCodeAt(1)); // 85
console.log("str.charCodeAt(2) 为:" + str.charCodeAt(2)); // 78
console.log("str.charCodeAt(3) 为:" + str.charCodeAt(3)); // 79
console.log("str.charCodeAt(4) 为:" + str.charCodeAt(4)); // 79
console.log("str.charCodeAt(5) 为:" + str.charCodeAt(5)); // 66
|
| 3. | concat()
Verkettet zwei oder mehr Strings und gibt einen neuen String zurück. |
var str1 = new String( "EXAMPLE" );
var str2 = new String( "GOOGLE" );
var str3 = str1.concat( str2 );
console.log("str1 + str2 : "+str3) // EXAMPLEGOOGLE
|
| 4. | indexOf()
Gibt die Position des ersten Vorkommens eines angegebenen String-Werts in einem String zurück. |
var str1 = new String( "EXAMPLE" );
var index = str1.indexOf( "OO" );
console.log("查找的字符串位置 :" + index ); // 3
|
| 5. | lastIndexOf()
Durchsucht eine Zeichenkette von hinten nach vorn und gibt die Position des letzten Vorkommens zurück, gezählt ab der Startposition (0). |
var str1 = new String( "This is string one and again string" );
var index = str1.lastIndexOf( "string" );
console.log("lastIndexOf 查找到的最后字符串位置 :" + index ); // 29
index = str1.lastIndexOf( "one" );
console.log("lastIndexOf 查找到的最后字符串位置 :" + index ); // 15
|
| 6. | localeCompare()
Vergleicht zwei Zeichenketten in einer gebietsschemaabhängigen Reihenfolge. |
var str1 = new String( "This is beautiful string" );
var index = str1.localeCompare( "This is beautiful string");
console.log("localeCompare first :" + index ); // 0
|
| 7. | match() Findet eine oder mehrere Übereinstimmungen mit einem regulären Ausdruck. |
var str="The rain in SPAIN stays mainly in the plain"; var n=str.match(/ain/g); // ain,ain,ain |
| 8. | replace()
Ersetzt Teilzeichenfolgen, die einem regulären Ausdruck entsprechen. |
var re = /(\w+)\s(\w+)/; var str = "zara ali"; var newstr = str.replace(re, "$2, $1"); console.log(newstr); // ali, zara |
| 9. | search()
Sucht nach einem Wert, der mit einem regulären Ausdruck übereinstimmt. |
var re = /apples/gi;
var str = "Apples are round, and apples are juicy.";
if (str.search(re) == -1 ) {
console.log("Does not contain Apples" );
} else {
console.log("Contains Apples" );
}
|
| 10. | slice()
Extrahiert ein Fragment einer Zeichenkette und gibt den extrahierten Teil in einer neuen Zeichenkette zurück. |
|
| 11. | split()
Teilt eine Zeichenkette in ein Array von Teilzeichenketten auf. |
var str = "Apples are round, and apples are juicy.";
var splitted = str.split(" ", 3);
console.log(splitted) // [ 'Apples', 'are', 'round,' ]
|
| 12. | substr()
Extrahiert eine angegebene Anzahl von Zeichen aus einer Zeichenkette, beginnend am Startindex. |
|
| 13. | substring()
Extrahiert Zeichen zwischen zwei angegebenen Indizes in einer Zeichenkette. |
var str = "EXAMPLE GOOGLE TAOBAO FACEBOOK";
console.log("(1,2): " + str.substring(1,2)); // U
console.log("(0,10): " + str.substring(0, 10)); // EXAMPLE GOO
console.log("(5): " + str.substring(5)); // B GOOGLE TAOBAO FACEBOOK
|
| 14. | toLocaleLowerCase()
Konvertiert eine Zeichenkette gemäß dem Gebietsschema des Hosts in Kleinbuchstaben. Nur wenige Sprachen (wie Türkisch) haben gebietsschemaspezifische Zuordnungen für Groß-/Kleinschreibung. |
var str = "Example Google"; console.log(str.toLocaleLowerCase( )); // example google |
| 15. | toLocaleUpperCase()
Konvertiert eine Zeichenkette gemäß dem Gebietsschema des Hosts in Großbuchstaben. Nur wenige Sprachen (wie Türkisch) haben gebietsschemaspezifische Zuordnungen für Groß-/Kleinschreibung. |
var str = "Example Google"; console.log(str.toLocaleUpperCase( )); // EXAMPLE GOOGLE |
| 16. | toLowerCase()
Konvertiert eine Zeichenkette in Kleinbuchstaben. |
var str = "Example Google"; console.log(str.toLowerCase( )); // example google |
| 17. | toString()
Gibt eine Zeichenkette zurück. |
var str = "Example"; console.log(str.toString( )); // Example |
| 18. | toUpperCase()
Konvertiert eine Zeichenkette in Großbuchstaben. |
var str = "Example Google"; console.log(str.toUpperCase( )); // EXAMPLE GOOGLE |
| 19. | valueOf()
Gibt den primitiven Wert des angegebenen String-Objekts zurück. |
var str = new String("Example");
console.log(str.valueOf( )); // Example
|
Empfehlungen für die Verwendung von String-Objekten
In TypeScript ist die Verwendung des String-Objekts normalerweise unnötig. Die direkte Verwendung von String-Literalen ist effizienter und entspricht den TypeScript-Best Practices:
- Leistung:
StringDas Objekt ist ein Referenztyp, belegt mehr Speicher, und die jedes Mal erneute Erstellung eines neuen Objekts verursacht einen höheren Performance-Overhead. - Typsicherheit: TypeScript empfiehlt die Verwendung von
stringLiteral-Typen, um den Code prägnant und konsistent zu halten.
Wenn Sie tatsächlich Methoden des String-Objekts verwenden müssen, können Sie das Objekt mit der valueOf()-Methode in einen primitiven String umwandeln und dann mit der Verarbeitung fortfahren.
Im Allgemeinen empfiehlt TypeScript, den String-Literal-Typ direkt zu verwenden, um Code zu vereinfachen, die Performance zu verbessern und unnötige Typkonvertierungen und Komplexität zu vermeiden.
Beispiel
let strObject: String = new String("Vermeiden Sie die Verwendung von String-Objekten.");
console.log(strLiteral); // Ausgabe: "Verwenden Sie nach Möglichkeit String-Literale!"
console.log(strObject.valueOf()); // Ausgabe: "Vermeiden Sie die Verwendung von String-Objekten."