Cadenas de Caracteres
En JavaScript, los datos de tipo texto se almacenan como cadenas de caracteres. No existe un tipo de dato separado para caracteres individuales.
Internamente, las cadenas siempre se representan en UTF-16, independientemente de la codificación de la página.
Comillas
Las cadenas pueden delimitarse usando comillas simples, comillas dobles o backticks (acento grave):
let single = 'comillas simples';
let double = "comillas dobles";
let backticks = `backticks`;
Las comillas simples y dobles son prácticamente equivalentes. Los backticks permiten la inserción de expresiones dentro de la cadena usando ${…}
:
function sum(a, b) {
return a + b;
}
alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.
Otra ventaja de los backticks es que permiten extender una cadena en múltiples líneas:
let guestList = `Invitados:
* Juan
* Pedro
* María
`;
alert(guestList); // lista de invitados en varias líneas
Las comillas simples y dobles no funcionan de la misma manera:
let guestList = "Invitados: // Error: Unexpected token ILLEGAL
* Juan";
Las comillas simples y dobles provienen de épocas en que no se consideraban las múltiples líneas. Los backticks son más recientes y versátiles.
Además, los backticks permiten especificar una “función de plantilla” antes del primer backtick. La sintaxis es func\
string`. La función
func` es llamada automáticamente y puede procesar el string y las expresiones insertadas.
Caracteres Especiales
Es posible crear cadenas de múltiples líneas con comillas simples utilizando el carácter de nueva línea \n
:
let guestList = 'Invitados:\n * Juan\n * Pedro\n * María';
alert(guestList); // lista de invitados en múltiples líneas
Por ejemplo, estas dos líneas son equivalentes pero están escritas de manera diferente:
let str1 = "Hello\nWorld"; // dos líneas usando el símbolo de nueva línea
let str2 = `Hello
World`; // dos líneas usando nueva línea y backticks
Ambas cadenas son iguales:
alert(str1 == str2); // true
Otros caracteres especiales son menos comunes:
Carácter | Descripción |
---|---|
\n | Nueva línea |
\r | Retorno de carro |
‘, “, ` | Comillas |
\ | Barra invertida |
\t | Tabulación |
\b, \f, \v | Retroceso, avance de formulario, tabulación vertical |
Los caracteres especiales comienzan con la barra invertida \
. Para mostrar una barra invertida real, hay que duplicarla:
alert(`La barra invertida: \\`); // La barra invertida: \
Las comillas escapadas `’, “, “ se usan para insertar una comilla en una cadena delimitada por el mismo tipo de comilla:
alert('¡Yo soy la \'morsa\'!'); // ¡Yo soy la 'morsa'!
Para evitar escapado de comillas, se pueden usar comillas dobles o backticks:
alert("¡Yo soy la 'morsa'!"); // ¡Yo soy la 'morsa'!
Además de estos caracteres, también hay una notación especial para códigos Unicode \u…
, aunque rara vez se usa.
Longitud de la Cadena
La propiedad length
contiene la longitud de la cadena:
alert(`Mi\n`.length); // 3
El carácter \n
cuenta como uno solo, por lo que la longitud total es 3.
Acceso a Caracteres
Para acceder a un carácter en una posición específica, se pueden usar corchetes []
o el método str.at(pos)
. La primera posición es cero:
let str = `Hola`;
alert(str[0]); // H
alert(str.at(0)); // H
alert(str[str.length - 1]); // a
alert(str.at(-1)); // a
El método .at(pos)
permite posiciones negativas, contando desde el final de la cadena:
let str = `Hola`;
alert(str[-2]); // undefined
alert(str.at(-2)); // l
También se puede iterar sobre los caracteres con for..of
:
for (let char of 'Hola') {
alert(char); // H, o, l, a
}
Inmutabilidad de las Cadenas
Las cadenas en JavaScript no pueden ser modificadas directamente:
let str = 'Hola';
str[0] = 'h'; // error
alert(str[0]); // no funciona
Para modificar una cadena, se debe crear una nueva cadena y asignarla:
let str = 'Hola';
str = 'h' + str[1] + str[2] + str[3]; // reemplaza la cadena
alert(str); // hola
Cambio de Capitalización
Los métodos toLowerCase()
y toUpperCase()
cambian los caracteres a minúscula y mayúscula respectivamente:
alert('Interfaz'.toUpperCase()); // INTERFAZ
alert('Interfaz'.toLowerCase()); // interfaz
alert('Interfaz'[0].toLowerCase()); // 'i'
Búsqueda de Subcadenas
Hay varias formas de buscar subcadenas en una cadena:
str.indexOf
Busca una subcadena en str
, comenzando desde la posición pos
, y retorna la posición de la coincidencia o -1 si no se encuentra:
let str = 'Widget con id';
alert(str.indexOf('Widget')); // 0
alert(str.indexOf('widget')); // -1
alert(str.indexOf('id')); // 1
alert(str.indexOf('id', 2)); // 11
Para encontrar todas las ocurrencias, se puede usar un bucle:
let str = 'Astuto como un zorro, fuerte como un buey';
let target = 'como';
let pos = 0;
while (true) {
let foundPos = str.indexOf(target, pos);
if (foundPos == -1) break;
alert(`Encontrado en ${foundPos}`);
pos = foundPos + 1;
}
También se puede escribir de forma más concisa:
let str = 'Astuto como un zorro, fuerte como un buey';
let target = "como";
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
alert(pos);
}
Para modificar una cadena, se debe crear una nueva cadena y asignarla:
let str = 'Astuto como un zorro, fuerte como un buey';
let target = "como";
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
alert(pos);
}
str.lastIndexOf
Busca desde el final de la cadena hacia el comienzo:
let str = "Widget con id";
alert(str.lastIndexOf("Widget")); // 0
str.includes
Devuelve true
o false
si str
contiene la subcadena substr
:
alert('Widget con id'.includes('Widget')); // true
alert('Hola'.includes('Adiós')); // false
alert('Midget'.includes('id')); // true
alert('Midget'.includes('id', 3)); // false
Resumen
Hemos cubierto el trabajo con cadenas de caracteres en JavaScript, incluyendo comillas, caracteres especiales, longitud de cadena, acceso a caracteres, inmutabilidad, cambio de capitalización, búsqueda de subcadenas, obtención de subcadenas y comparación de cadenas.