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 Datentypstring, 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 strLiteral: string = "Hello";
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 strLiteral: string = "Test";
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 strLiteral = "Test";
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 vonstringLiteral-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 strLiteral: string = "Verwenden Sie nach Möglichkeit String-Literale!";
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."
Andere Erweiterungen