--- title: String — Cadena de caracteres slug: Web/JavaScript/Reference/Global_Objects/String tags: - Clase - Class - ECMAScript 2015 - JavaScript - Referencia - String translation_of: Web/JavaScript/Reference/Global_Objects/String original_slug: Web/JavaScript/Referencia/Objetos_globales/String ---
El objeto String
se utiliza para representar y manipular una secuencia de caracteres.
Las cadenas son útiles para almacenar datos que se pueden representar en forma de texto. Algunas de las operaciones más utilizadas en cadenas son verificar su {{jsxref("String.length", "length")}}, para construirlas y concatenarlas usando operadores de cadena + y +=, verificando la existencia o ubicación de subcadenas con {{jsxref("String.prototype.indexOf()", "indexOf()")}} o extraer subcadenas con el método {{jsxref("String.prototype.substring()", "substring()")}}.
Las cadenas se pueden crear como primitivas, a partir de cadena literales o como objetos, usando el constructor {{jsxref("String/String", "String()")}}:
const string1 = "Una cadena primitiva"; const string2 = 'También una cadena primitiva'; const string3 = `Otra cadena primitiva más`;
const string4 = new String("Un objeto String");
Las string
s primitivas y los objetos string
se pueden usar indistintamente en la mayoría de las situaciones. Consulta "Primitivas String
y objetos String
" a continuación.
Los cadena literales se pueden especificar usando comillas simples o dobles, que se tratan de manera idéntica, o usando el carácter de comilla invertida `. Esta última forma especifica una Plantilla literal: con esta forma puedes interpolar expresiones.
Hay dos formas de acceder a un caracter individual en una cadena. La primera es con el método {{jsxref("String.prototype.charAt()", "charAt()")}}:
return 'cat'.charAt(1) // devuelve "a"
La otra forma (introducida en ECMAScript 5) es tratar a la cadena como un objeto similar a un arreglo, donde los caracteres individuales corresponden a un índice numérico:
return 'cat'[1] // devuelve "a"
Cuando se usa la notación entre corchetes para acceder a los caracteres, no se puede intentar eliminar o asignar un valor a estas propiedades. Las propiedades involucradas no se pueden escribir ni configurar. (Ve {{jsxref("Object.defineProperty()")}} para más información).
En C, se usa la función strcmp()
para comparar cadenas. En JavaScript, solo usas los operadores menor que y mayor que:
let a = 'a' let b = 'b' if (a < b) { // true console.log(a + ' es menor que ' + b) } else if (a > b) { console.log(a + ' es mayor que ' + b) } else { console.log(a + ' y ' + b + ' son iguales.') }
Puedes lograr un resultado similar usando el método {{jsxref("String.prototype.localeCompare()", "localeCompare()")}} heredado por las instancias de String
.
Ten en cuenta que a == b
compara las cadenas en a
y b
por ser igual en la forma habitual que distingue entre mayúsculas y minúsculas. Si deseas comparar sin tener en cuenta los caracteres en mayúsculas o minúsculas, usa una función similar a esta:
function isEqual(str1, str2) { return str1.toUpperCase() === str2.toUpperCase() } // isEqual
En esta función se utilizan mayúsculas en lugar de minúsculas, debido a problemas con ciertas conversiones de caracteres UTF-8.
String
y objetos String
Ten en cuenta que JavaScript distingue entre objetos String
y valores de {{Glossary("Primitive", "primitivas string")}}. (Lo mismo ocurre con {{jsxref("Boolean", "Booleanos")}} y {{jsxref("Global_Objects/Number", "Números")}}).
Las cadenas literales (denotadas por comillas simples o dobles) y cadenas devueltas de llamadas a String
en un contexto que no es de constructor (es decir, llamado sin usar la palabra clave {{jsxref("Operators/new", "new")}}) son cadenas primitivas. JavaScript automáticamente convierte las primitivas en objetos String
, por lo que es posible utilizar métodos del objeto String
en cadenas primitivas. En contextos donde se va a invocar a un método en una cadena primitiva o se produce una búsqueda de propiedad, JavaScript ajustará automáticamente la cadena primitiva y llamará al método o realizará la búsqueda de la propiedad.
let s_prim = 'foo' let s_obj = new String(s_prim) console.log(typeof s_prim) // Registra "string" console.log(typeof s_obj) // Registra "object"
Las primitivas de String
y los objetos String
también dan diferente resultado cuando se usa {{jsxref("Global_Objects/eval", "eval()")}}. Las primitivas pasadas a eval
se tratan como código fuente; Los objetos String
se tratan como todos los demás objetos, devuelven el objeto. Por ejemplo:
let s1 = '2 + 2' // crea una string primitiva let s2 = new String('2 + 2') // crea un objeto String console.log(eval(s1)) // devuelve el número 4 console.log(eval(s2)) // devuelve la cadena "2 + 2"
Por estas razones, el código se puede romper cuando encuentra objetos String
y espera una string
primitiva en su lugar, aunque generalmente los autores no necesitan preocuparse por la distinción.
Un objeto String
siempre se puede convertir a su contraparte primitiva con el método {{jsxref("String.prototype.valueOf()", "valueOf()")}}.
console.log(eval(s2.valueOf())) // devuelve el número 4
Los caracteres especiales se pueden codificar mediante notación de escape:
Código | Salida |
---|---|
\XXX (donde XXX es de 1 a 3 dígitos octales; rango de 0 -377 ) |
Punto de código Unicode/carácter ISO-8859-1 entre U+0000 y U+00FF |
\' |
Comilla sencilla |
\" |
Comilla doble |
\\ |
Barra inversa |
\n |
Nueva línea |
\r |
Retorno de carro |
\v |
Tabulación vertical |
\t |
Tabulación |
\b |
Retroceso |
\f |
Avance de página |
\uXXXX (donde XXXX son 4 dígitos hexadecimales; rango de 0x0000 -0xFFFF ) |
Unidad de código UTF-16/punto de código Unicode entre U+0000 y U+FFFF |
\u{X} ... \u{XXXXXX} (donde X…XXXXXX es de 1 a 6 dígitos hexadecimales; rango de 0x0 -0x10FFFF ) |
Unidad de código UTF-32/punto de código Unicode entre U+0000 y U+10FFFF |
\xXX (donde XX son 2 dígitos hexadecimales; rango de 0x00 -0xFF ) |
Punto de código Unicode/carácter ISO-8859-1 entre U+0000 y U+00FF |
A veces, tu código incluirá cadenas que son muy largas. En lugar de tener líneas que se prolongan interminablemente o que se ajustan según el capricho de tu editor, es posible que desees dividir específicamente la cadena en varias líneas en el código fuente sin afectar el contenido real de la cadena. hay dos maneras de conseguirlo.
Puedes usar el operador + para agregar varias cadenas juntas, así:
let longString = "Esta es una cadena muy larga que necesita " + "que dividimos en varias líneas porque " + "de lo contrario, mi código es ilegible."
Puedes usar el caracter de barra invertida (\
) al final de cada línea para indicar que la cadena continúa en la siguiente línea. Asegúrate de que no haya ningún espacio ni ningún otro carácter después de la barra invertida (a excepción de un salto de línea) o como sangría; de lo contrario, no trabajará.
Esa forma se ve así:
let longString = "Esta es una cadena muy larga que necesita \ que dividimos en varias líneas porque \ de lo contrario, mi código es ilegible."
Ambos métodos anteriores dan como resultado cadenas idénticas.
String
. Realiza la conversión de tipos cuando se llama como función, en lugar de como constructor, lo cual suele ser más útil.length
de la cadena. Solo lectura.index
especificado.index
dado.pos
especificada.searchString
.searchString
.searchValue
, o -1
si no lo encontró.searchValue
, o -1
si no lo encontró.compareString
viene antes, después o es equivalente a la cadena dada en el orden de clasificación.regexp
con una cadena.regexp
.targetLength
.targetLength
.count
veces.searchFor
usando replaceWith
. searchFor
puede ser una cadena o expresión regular, y replaceWith
puede ser una cadena o función.searchFor
usando replaceWith
. searchFor
puede ser una cadena o expresión regular, y replaceWith
puede ser una cadena o función.regexp
y la cadena llamadora.sep
.searchString
.Los caracteres dentro de una cadena se convierten a minúsculas respetando la configuración regional actual.
Para la mayoría de los idiomas, devolverá lo mismo que {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}}.
Los caracteres dentro de una cadena se convierten a mayúsculas respetando la configuración regional actual.
Para la mayoría de los idiomas, devolverá lo mismo que {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}}.
Iterator
que itera sobre los puntos de código de un valor de cadena, devolviendo cada punto de código como un valor de cadena.Desaprobado. Evita estos métodos.
Son de uso limitado, ya que proporcionan solo un subconjunto de las etiquetas y atributos HTML disponibles.
Es posible usar String
como una alternativa más confiable de {{jsxref("String.prototype.toString()", "toString()")}}, ya que funciona cuando se usa en {{jsxref( "null")}}, {{jsxref("undefined")}} y en {{jsxref("Symbol", "símbolos")}}. Por ejemplo:
let outputStrings = [] for (let i = 0, n = inputValues.length; i < n; ++i) { outputStrings.push(String(inputValues[i])); }
Especificación |
---|
{{SpecName('ESDraft', '#sec-string-objects', 'String')}} |
{{Compat("javascript.builtins.String")}}
StringView
— una representación similar a C de cadenas basada en arreglos tipados