Cualquier conjunto de caracteres (letras, números, símbolos, etcétera) entre un conjunto de comillas dobles ("
), comillas simples ('
) o acentos graves (`) es una primitiva de cadena. Ya viste algunos ejemplos de cadenas en este curso: las instancias de console.log
en el módulo anterior contenían primitivas de cadenas.
console.log( "Hello, World." );
> Hello, World.
"Hello, World."
es una primitiva de cadena. Obtienes el mismo resultado con comillas simples o acentos graves:
console.log( 'Hello, World.' );
> Hello, World.
console.log(`Hello, World.`);
> Hello, World.
Una serie de caracteres entre comillas se denomina cadena literal. Las comillas dobles y simples se comportan de la misma manera, y una puede contener la otra como un carácter en la cadena:
console.log( "I'm a string." );
> I'm a string.
console.log( '"A string," I said.' );
> "A string," I said.
Una instancia del mismo carácter de cierre dentro de la cadena “cierra” la cadena, lo que probablemente cause errores:
console.log( '"I'm a string," I said.' );
> Uncaught SyntaxError: missing ) after argument list
Para evitar esto, escapa el carácter con una barra diagonal inversa (\
):
console.log( '"I\'m a string," I said.' );
> "I'm a string," I said.
Objeto de cadena
Cuando se llama como una función, el objeto String
convierte un valor especificado en una cadena literal.
let myString = String( 10 );
myString
> "10"
typeof myString
> string
Como se detalla en la herencia prototípica, raramente necesitarás usar el objeto String
como constructor. Crea un objeto de cadena que contiene el valor especificado, junto con los métodos y las propiedades que ya proporciona el objeto String
, en lugar de una cadena literal.
let stringObj = new String( "My new string." );
typeof stringObj
> object
stringObj
> String { "My new string." }
Concatenación
Cuando se usa en el contexto de cadenas en lugar de números, un solo signo más (+
) actúa como un operador de concatenación, que combina varios valores de cadena en una sola cadena:
console.log( "My" + " string." );
> My string.
Literales de cadena y literales de plantilla
Las comillas simples, las dobles y las acentos graves se pueden usar indistintamente para crear primitivas de cadenas. Sin embargo, también puedes usar acentos graves para especificar literales de plantilla (a veces llamados "cadenas de plantilla"). A diferencia de los literales de cadena creados con comillas simples o dobles, los literales de plantilla permiten cadenas de varias líneas y interpolación de cadenas.
const myString = "This
is a string.";
> Uncaught SyntaxError: "" string literal contains an unescaped line break
const myString = `This
is a string.`;
console.log( myString );
> This
is a string.
Los literales de plantilla pueden contener expresiones de marcador de posición marcadas con un signo de dólar y llaves (${}
). Estos marcadores de posición se "interpolan" de forma predeterminada, lo que significa que el resultado de la expresión reemplaza el marcador de posición en la cadena final.
console.log( "The result is " + ( 2 + 4 ) + "." );
> The result is 6.
console.log( `The result is ${ 2 + 4 }.` );
> The result is 6.
Se puede pasar una plantilla literal a una función personalizada para crear una plantilla etiquetada, una llamada a función que usa una sola plantilla literal como un conjunto de argumentos y permite que sus marcadores de posición se propaguen según la lógica definida por el autor.
El primer argumento de una función de etiqueta contiene un array de valores de cadena, y los argumentos restantes definen los marcadores de posición. Para crear este array de valores de cadena, se "divide" el literal de plantilla en cada marcador de posición que contiene. El primer elemento del array contiene cualquier carácter hasta el primer marcador de posición, el segundo elemento contiene cualquier carácter entre el primer y el segundo marcador de posición, y así sucesivamente. Cada marcador de posición se pasa a la función de etiqueta como un valor independiente con un marcador de posición asociado.
const myNoun = "template literal";
function myTagFunction( myStrings, myPlaceholder ) {
const myInitialString = myStrings[ 0 ];
console.log( `${ myInitialString }modified ${ myPlaceholder }.` );
}
myTagFunction`I'm a ${ myNoun }.`;
> "I'm a modified template literal."
Verifica tu comprensión
¿Qué carácter se usa para escapar caracteres?
"
)/
)∖
)¿Qué carácter se usa para la concatenación?
.
&
+