TypeScript String (cadena)

En TypeScript, la cadena (String) es un tipo de datos básico utilizado para representar datos de texto; hereda y amplía las características de las cadenas de JavaScript, y además añade verificación estática de tipos.

Sintaxis

var txt = new String("string");

O de forma más sencilla:

var txt = "string";

Dos formas de creación y diferencias principales

En TypeScript hay dos formas de crear cadenas, pero ambas tienen diferencias esenciales en tipo, rendimiento y escenarios de uso:

Forma 1: Literal de cadena (recomendado)

Es la forma más común y de mejor rendimiento en TypeScript/JavaScript; crea el tipo de cadena primitiva (string) y es el tipo de cadena predeterminado en el sistema de tipos de TypeScript.

// 原始字符串(推荐使用)
const txt1: string = "Hello TypeScript"; // 显式指定类型
const txt2 = "Hello JavaScript"; // 类型推导为 string

Forma 2: Objeto String (no recomendado)

Mediantenew String()Lo que se crea es un tipo de objeto envoltorio (String), que en esencia es un objeto, no un valor primitivo, lo que conlleva confusión de tipos y pérdida de rendimiento.

// String 对象(不推荐)
const txtObj: String = new String("Hello Object"); // 类型为 String(对象)

Los objetos String y los literales de cadena son diferentes en tipo:

  • El literal de cadena es un tipo de dato primitivostring, que se utiliza para almacenar directamente el valor de la cadena.
  • StringEl objeto esStringdel tipo String; en realidad, es un objeto, no un valor de cadena primitivo.

Ejemplo

let strLiteral: string = "Hello";
let strObject: String = new String("Hello");

console.log(typeof strLiteral); // Salida: "string"
console.log(typeof strObject);  // Salida: "object"
Característica Literal de cadena (string) Objeto String (String)
Naturaleza del tipo Valor primitivo Tipo de referencia (objeto)
Rendimiento Eficiente, sin sobrecarga de memoria adicional Ineficiente, crea una instancia de objeto
Verificación de tipos (TypeScript) Cumple con la especificación de tipos básicos de TS Desajuste de tipos (por ejemplo, una variable de tipo string no puede recibir un objeto String)
Forma de comparación Comparar directamente el valor Comparar la dirección de referencia (se debe usar valueOf() para obtener el valor primitivo)

Compatibilidad de tipos entre literales de cadena y objetos String

En TypeScript, el tipo literal de cadena string y el tipo de objeto String no son completamente compatibles.

Por ejemplo, una variable de tipo string no puede usar directamente los métodos del objeto String, y viceversa. Por lo tanto, en circunstancias normales no es necesario usar el objeto String.

Ejemplo

let strLiteral: string = "Test";
let strObject: String = new String("Test");

console.log(strLiteral === strObject);  // Salida: false, el contenido es el mismo, el tipo es diferente
console.log(strLiteral == strObject);   // Salida: true, el contenido es el mismo
console.log(strLiteral === strObject.valueOf()); // Salida: true, comparar después de convertir el objeto a cadena primitiva

strLiteral es del tipo de cadena primitiva (string), mientras que strObject es del tipo de objeto String (String). Esto significa que sus tipos son diferentes.

El código anterior se convierte a código JavaScript de la siguiente manera:

Ejemplo

var strLiteral = "Test";
var strObject = new String("Test");
console.log(strLiteral === strObject); // Salida: false, el contenido es el mismo, el tipo es diferente
console.log(strLiteral == strObject); // Salida: true, el contenido es el mismo
console.log(strLiteral === strObject.valueOf()); // Salida: true, comparar después de convertir el objeto a cadena primitiva

Propiedades del objeto String

La siguiente tabla enumera las propiedades admitidas por el objeto String:

N.º Propiedad y descripción Ejemplo
1. constructor

Referencia a la función que creó el objeto.

var str = new String( "This is string" ); 
console.log("str.constructor is:" + str.constructor)

Resultado de salida:

str.constructor is:function String() { [native code] }
2. length

Devuelve la longitud de la cadena.

var uname = new String("Hello World") 
console.log("Length "+uname.length)  // 输出 11
3. prototype

Permite agregar propiedades y métodos al objeto.

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)

Métodos de String

La siguiente tabla enumera los métodos admitidos por el objeto String:

N.º Método y descripción Ejemplo
1. charAt()

Devuelve el carácter en la posición especificada.

var str = new String("EJEMPLO"); 
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()

Devuelve la codificación Unicode del carácter en la posición especificada.

var str = new String("EJEMPLO"); 
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()

Concatena dos o más cadenas y devuelve una nueva cadena.

var str1 = new String( "EJEMPLO" ); 
var str2 = new String( "GOOGLE" ); 
var str3 = str1.concat( str2 ); 
console.log("str1 + str2 : "+str3) // EJEMPLOGOOGLE
4. indexOf()

Devuelve la posición de la primera aparición del valor de cadena especificado en la cadena.

var str1 = new String( "EJEMPLO" ); 

var index = str1.indexOf( "OO" ); 
console.log("查找的字符串位置 :" + index );  // 3
5. lastIndexOf()

Busca la cadena de atrás hacia adelante y devuelve la última posición en la que aparece la cadena, calculada desde la posición inicial (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()

Compara dos cadenas según el orden específico de la configuración regional.

var str1 = new String( "This is beautiful string" );
  
var index = str1.localeCompare( "This is beautiful string");  

console.log("localeCompare first :" + index );  // 0
7.

match()

Busca una o más coincidencias de una expresión regular.

var str="The rain in SPAIN stays mainly in the plain"; 
var n=str.match(/ain/g);  // ain,ain,ain
8. replace()

Reemplaza la subcadena que coincide con la expresión regular.

var re = /(\w+)\s(\w+)/; 
var str = "zara ali"; 
var newstr = str.replace(re, "$2, $1"); 
console.log(newstr); // ali, zara
9. search()

Recupera el valor que coincide con la expresión regular.

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()

Extrae un fragmento de la cadena y devuelve la parte extraída en una nueva cadena.

11. split()

Divide la cadena en un array de subcadenas.

var str = "Apples are round, and apples are juicy."; 
var splitted = str.split(" ", 3); 
console.log(splitted)  // [ 'Apples', 'are', 'round,' ]
12. substr()

Extrae un número especificado de caracteres de la cadena desde el índice inicial.

13. substring()

Extrae los caracteres entre dos índices especificados de la cadena.

var str = "EJEMPLO GOOGLE TAOBAO FACEBOOK"; 
console.log("(1,2): "    + str.substring(1,2));   // U
console.log("(0,10): "   + str.substring(0, 10)); // EJEMPLO GOO
console.log("(5): "      + str.substring(5));     // B GOOGLE TAOBAO FACEBOOK
14. toLocaleLowerCase()

Convierte la cadena a minúsculas según la configuración regional del host; solo unos pocos idiomas (como el turco) tienen asignaciones de mayúsculas y minúsculas específicas de la región.

var str = "Ejemplo Google"; 
console.log(str.toLocaleLowerCase( ));  // ejemplo google
15. toLocaleUpperCase()

Convierte la cadena a mayúsculas según la configuración regional del host; solo unos pocos idiomas (como el turco) tienen asignaciones de mayúsculas y minúsculas específicas de la región.

var str = "Ejemplo Google"; 
console.log(str.toLocaleUpperCase( ));  // EJEMPLO GOOGLE
16. toLowerCase()

Convierte la cadena a minúsculas.

var str = "Ejemplo Google"; 
console.log(str.toLowerCase( ));  // ejemplo google
17. toString()

Devuelve la cadena.

var str = "Ejemplo"; 
console.log(str.toString( )); // Ejemplo
18. toUpperCase()

Convierte la cadena a mayúsculas.

var str = "Ejemplo Google"; 
console.log(str.toUpperCase( ));  // EJEMPLO GOOGLE
19. valueOf()

Devuelve el valor primitivo del objeto String especificado.

var str = new String("Ejemplo"); 
console.log(str.valueOf( ));  // Ejemplo

Recomendaciones de uso del objeto String

En TypeScript, usar el objeto String generalmente no es necesario; usar literales de cadena string es más eficiente y sigue las mejores prácticas de TypeScript:

  • Rendimiento:StringEl objeto es un tipo de referencia, ocupa más memoria y cada vez que se crea un nuevo objeto, la sobrecarga de rendimiento es mayor.
  • Seguridad de tipos: TypeScript fomenta más el uso destringtipos literales, para mantener la simplicidad y consistencia del código.

Si realmente se necesita usar los métodos del objeto String, se puede convertir el objeto a una cadena primitiva mediante el método valueOf() y luego continuar con el procesamiento.

En circunstancias normales, TypeScript recomienda usar directamente el tipo literal string para simplificar el código, mejorar el rendimiento y evitar conversiones de tipo y complejidades innecesarias.

Ejemplo

let strLiteral: string = "Use string literals whenever possible!";
let strObject: String = new String("Avoid using String objects.");

console.log(strLiteral);                // Salida: "Use string literals whenever possible!"
console.log(strObject.valueOf());       // Salida: "Avoid using String objects."
Otras extensiones