Template literals en JavaScript: sintaxis y uso práctico
Resumen
Aprende a dominar los strings en JavaScript con técnicas modernas y claras. Aquí verás por qué son primitivos inmutables, cómo evitar errores comunes al concatenar y cómo los template literals de ECMAScript 6 simplifican la interpolación, las expresiones y el texto multilínea. Todo con ejemplos prácticos y directos.
¿Qué son los strings y por qué son primitivos inmutables?
Los strings son primitivos inmutables: cada operación que aparenta “modificar” un string crea uno nuevo. El valor original no cambia. Esto es clave para razonar sobre memoria y evitar efectos inesperados.
También puedes usar comillas simples o dobles para definir strings. No hay una regla estricta, elige la que prefieras.
Ejemplo básico y salida en consola con varios parámetros.
// Variables y comillas simples.const nombre ='JavaScript';const version ='6';// Imprimir varios valores en una sola línea.console.log(nombre, version);// JavaScript 6
Ideas clave:
Inmutabilidad: cada cambio genera un nuevo string.
Comillas simples o dobles: elige la que te acomode.
console.log con coma: imprime varios valores sin concatenar.
¿Cómo concatenar y por qué usar template literals en ECMAScript 6?
La concatenación con + funciona, pero es propensa a errores y dificulta la lectura. Con template literals (las comillas invertidas) puedes interpolar variables con ${}, reducir fallos y escribir frases más limpias.
¿Qué problemas causa la concatenación con '+'?
Fácil olvidar un espacio o un operador +.
Frases largas se vuelven difíciles de leer.
Aumenta la posibilidad de errores por edición.
// Concatenación tradicional con +.const mensaje ='Bienvenido a '+ nombre +', versión '+ version +'.';console.log(mensaje);
¿Cómo simplifican los template literals la interpolación?
Interpolas variables con ${variable} de forma clara.
Mejor legibilidad en frases largas.
Puedes comentar líneas que no quieras ejecutar usando //.
// Template literals con interpolación.const mensaje2 =`Bienvenido y bienvenida al curso de ${nombre} en su versión: ${version}.`;console.log(mensaje2);// Comentar líneas que no se ejecutan.// console.log('Línea desactivada');
¿Cómo evaluar expresiones, typeof y multilínea con template literals?
Los template literals permiten evaluar expresiones dentro de ${}. También facilitan crear texto multilínea para formatos como Markdown. Ojo con dos detalles frecuentes: errores por typo en nombres de variables y olvidar imprimir valores en consola.
// Expresiones dentro de template literals.const precio =100;const cantidad =3;const total =`${precio * cantidad}`;// El resultado queda como string.console.log(total);// 300console.log(typeof total);// 'string'
El operador typeof muestra que total es un string, aunque uses números dentro de ${}. Más adelante se profundiza en la coerción de tipos.
Un typo como escribir una variable inexistente genera ReferenceError.
Si no usas console.log, no verás el resultado en la consola.
Texto multilínea con formato tipo Markdown usando saltos de línea nativos.
// Multilínea con template literals.const nota =`Mi nota
Este es el contenido
- nota uno
- nota dos
`;console.log(nota);
Habilidades y conceptos reforzados:
Primitivos inmutables y creación de nuevos strings al “modificar”.
Interpolación con ${} y mejor legibilidad con template literals.
Concatenación con + y sus riesgos al escalar.
Expresiones evaluadas dentro de template literals.
Multilínea nativo para estructurar contenido tipo Markdown.
Console.log, comentarios con // y diagnóstico con typeof.
Atención a errores por variables mal escritas y a ejecutar el bloque completo.
¿Te quedaron dudas o quieres compartir tus propios ejemplos con template literals y multilínea? Deja tu comentario y cuéntanos cómo lo aplicarías en tu proyecto.
En caso que quieras usar Template Literals, el comando para sacar ( ` )
Método universal (Código ASCII): Presionar Alt + 96.
Windows: AltGr + la tecla } o ^
Mac: option + }
// ============================================// Reto: Template literals en JavaScript// ============================================// Completa cada función usando template literals (comillas invertidas `)// y la interpolación ${} cuando se indique.// Ejecuta los tests con: npx vitest src/04-template-literals// ============================================// --- Reto 1: Mensaje de bienvenida con interpolación ---// Recibe "nombre" (ej: "JavaScript") y "version" (ej: "6").// Retorna el string: "Bienvenido a [nombre], versión [version]."// Usa template literals con ${nombre} y ${version}.functioncrearMensajeBienvenida(nombre, version){// Tu código aquíreturn`Bienvenido a ${nombre}, versión ${version}.`;}// --- Reto 2: Concatenación tradicional (contraste con +) ---// Recibe dos strings "parte1" y "parte2".// Retorna un solo string uniendo parte1 + " " + parte2 (concatenación con +).functionconcatenarConMas(parte1, parte2){// Tu código aquíreturn parte1 +" "+ parte2;}// --- Reto 3: Interpolar variables en una frase ---// Recibe "nombre" (ej: "JavaScript") y "curso" (ej: "Fundamentos").// Retorna: "Curso de [nombre]: [curso]." usando template literals.functioninterpolarVariables(nombre, curso){// Tu código aquíreturn`Curso de ${nombre}: ${curso}.`;}// --- Reto 4: Expresión dentro de template literal ---// Recibe "precio" (número) y "cantidad" (número).// Retorna un string con el resultado de precio * cantidad usando// un template literal: `${precio * cantidad}` (el resultado queda como string).functioncalcularTotalComoString(precio, cantidad){// Tu código aquíreturn`${precio * cantidad}`;}// --- Reto 5: Tipo de dato del resultado de interpolación ---// Sin parámetros. Retorna el tipo de dato de la expresión `${1 + 2}`.// Pista: usa typeof. El resultado de interpolación siempre es string.functiontipoDeResultadoInterpolado(){// Tu código aquíreturntypeof`${1+2}`;}// --- Reto 6: Texto multilínea con template literals ---// Recibe "titulo", "item1" e "item2" (strings).// Retorna un string con varias líneas con este formato (incluye los saltos de línea):// [titulo]// - [item1]// - [item2]// Usa template literals con saltos de línea nativos (no uses \n).functioncrearNotaMultilinea(titulo, item1, item2){// Tu código aquíreturn(`${titulo} - ${item1} - ${item2}`);}module.exports={ crearMensajeBienvenida, concatenarConMas, interpolarVariables, calcularTotalComoString, tipoDeResultadoInterpolado, crearNotaMultilinea,};
// ============================================// Reto: Template literals en JavaScript// ============================================// Completa cada función usando template literals (comillas invertidas `)// y la interpolación ${} cuando se indique.// Ejecuta los tests con: npx vitest src/04-template-literals// ============================================// --- Reto 1: Mensaje de bienvenida con interpolación ---// Recibe "nombre" (ej: "JavaScript") y "version" (ej: "6").// Retorna el string: "Bienvenido a [nombre], versión [version]."// Usa template literals con ${nombre} y ${version}.functioncrearMensajeBienvenida(nombre, version){return`Bienvenido a ${nombre}, versión ${version}.`;// Tu código aquí}// --- Reto 2: Concatenación tradicional (contraste con +) ---// Recibe dos strings "parte1" y "parte2".// Retorna un solo string uniendo parte1 + " " + parte2 (concatenación con +).functionconcatenarConMas(parte1, parte2){return parte1 +" "+ parte2;// Tu código aquí}// --- Reto 3: Interpolar variables en una frase ---// Recibe "nombre" (ej: "JavaScript") y "curso" (ej: "Fundamentos").// Retorna: "Curso de [nombre]: [curso]." usando template literals.functioninterpolarVariables(nombre, curso){return`Curso de ${nombre}: ${curso}.`;// Tu código aquí}// --- Reto 4: Expresión dentro de template literal ---// Recibe "precio" (número) y "cantidad" (número).// Retorna un string con el resultado de precio * cantidad usando// un template literal: `${precio * cantidad}` (el resultado queda como string).functioncalcularTotalComoString(precio, cantidad){return`${precio * cantidad}`;// Tu código aquí}// --- Reto 5: Tipo de dato del resultado de interpolación ---// Sin parámetros. Retorna el tipo de dato de la expresión `${1 + 2}`.// Pista: usa typeof. El resultado de interpolación siempre es string.functiontipoDeResultadoInterpolado(){returntypeof`${1+2}`;// Tu código aquí}// --- Reto 6: Texto multilínea con template literals ---// Recibe "titulo", "item1" e "item2" (strings).// Retorna un string con varias líneas con este formato (incluye los saltos de línea):// [titulo]// - [item1]// - [item2]// Usa template literals con saltos de línea nativos (no uses \n).functioncrearNotaMultilinea(titulo, item1, item2){return`${titulo}- ${item1}- ${item2}`;// Tu código aquí}module.exports={ crearMensajeBienvenida, concatenarConMas, interpolarVariables, calcularTotalComoString, tipoDeResultadoInterpolado, crearNotaMultilinea,};
// ============================================
// Reto: Template literals en JavaScript
// ============================================
// Completa cada función usando template literals (comillas invertidas `)
// y la interpolación ${} cuando se indique.
// Ejecuta los tests con: npx vitest src/04-template-literals
// ============================================
// --- Reto 1: Mensaje de bienvenida con interpolación ---
// Recibe "nombre" (ej: "JavaScript") y "version" (ej: "6").
// Retorna el string: "Bienvenido a [nombre], versión [version]."
// Usa template literals con ${nombre} y ${version}.
function crearMensajeBienvenida(nombre, version) {
return Bienvenido a ${nombre}, versión ${version}.; // Tu código aquí
}
// --- Reto 2: Concatenación tradicional (contraste con +) ---
// Recibe dos strings "parte1" y "parte2".
// Retorna un solo string uniendo parte1 + " " + parte2 (concatenación con +).
function concatenarConMas(parte1, parte2) {
return parte1 + " " + parte2;// Tu código aquí
}
// --- Reto 3: Interpolar variables en una frase ---
// Recibe "nombre" (ej: "JavaScript") y "curso" (ej: "Fundamentos").
// Retorna: "Curso de [nombre]: [curso]." usando template literals.
function interpolarVariables(nombre, curso) {
return Curso de ${nombre}: ${curso}.;// Tu código aquí
}
// --- Reto 4: Expresión dentro de template literal ---
// Recibe "precio" (número) y "cantidad" (número).
// Retorna un string con el resultado de precio * cantidad usando
// un template literal: ${precio \* cantidad} (el resultado queda como string).
function calcularTotalComoString(precio, cantidad) {
return ${precio \* cantidad}; // Tu código aquí
}
// --- Reto 5: Tipo de dato del resultado de interpolación ---
// Sin parámetros. Retorna el tipo de dato de la expresión ${1 + 2}.
// Pista: usa typeof. El resultado de interpolación siempre es string.
function tipoDeResultadoInterpolado() {
return typeof ${1 + 2};// Tu código aquí
}
// --- Reto 6: Texto multilínea con template literals ---
// Recibe "titulo", "item1" e "item2" (strings).
// Retorna un string con varias líneas con este formato (incluye los saltos de línea):
// [titulo]
// - [item1]
// - [item2]
// Usa template literals con saltos de línea nativos (no uses \n).
function crearNotaMultilinea(titulo, item1, item2) {
return `${titulo}
- ${item1}
- ${item2}`;// Tu código aquí
}
module.exports = {
crearMensajeBienvenida,
concatenarConMas,
interpolarVariables,
calcularTotalComoString,
tipoDeResultadoInterpolado,
crearNotaMultilinea,
};
Compartiendo mi código de los retos de esta clase:
// ============================================// Reto: Template literals en JavaScript// ============================================// Completa cada función usando template literals (comillas invertidas `)// y la interpolación ${} cuando se indique.// Ejecuta los tests con: npx vitest src/04-template-literals// ============================================// --- Reto 1: Mensaje de bienvenida con interpolación ---// Recibe "nombre" (ej: "JavaScript") y "version" (ej: "6").// Retorna el string: "Bienvenido a [nombre], versión [version]."// Usa template literals con ${nombre} y ${version}.functioncrearMensajeBienvenida(nombre, version){// Tu código aquíconst message=`Bienvenido a ${nombre}, versión ${version}.`;return message;}console.log(crearMensajeBienvenida('JavaScript','ES5'));// --- Reto 2: Concatenación tradicional (contraste con +) ---// Recibe dos strings "parte1" y "parte2".// Retorna un solo string uniendo parte1 + " " + parte2 (concatenación con +).functionconcatenarConMas(parte1, parte2){// Tu código aquíconst message2=parte1+' '+parte2;return message2;}console.log(concatenarConMas('hola','mensaje'));// --- Reto 3: Interpolar variables en una frase ---// Recibe "nombre" (ej: "JavaScript") y "curso" (ej: "Fundamentos").// Retorna: "Curso de [nombre]: [curso]." usando template literals.functioninterpolarVariables(nombre, curso){// Tu código aquíconst message3=`Curso de ${nombre}: ${curso}`;return message3;}console.log(interpolarVariables('JavaScript','Fundamentos'));// --- Reto 4: Expresión dentro de template literal ---// Recibe "precio" (número) y "cantidad" (número).// Retorna un string con el resultado de precio * cantidad usando// un template literal: `${precio * cantidad}` (el resultado queda como string).functioncalcularTotalComoString(precio, cantidad){// Tu código aquíconst total=`El total es ${precio * cantidad}`;return total;}console.log(calcularTotalComoString(1000,1));// --- Reto 5: Tipo de dato del resultado de interpolación ---// Sin parámetros. Retorna el tipo de dato de la expresión `${1 + 2}`.// Pista: usa typeof. El resultado de interpolación siempre es string.functiontipoDeResultadoInterpolado(){// Tu código aquíconst resultadoInterpolado=`El total de la expresión es: ${1+2}`;return resultadoInterpolado;}console.log(tipoDeResultadoInterpolado());// --- Reto 6: Texto multilínea con template literals ---// Recibe "titulo", "item1" e "item2" (strings).// Retorna un string con varias líneas con este formato (incluye los saltos de línea):// [titulo]// - [item1]// - [item2]// Usa template literals con saltos de línea nativos (no uses \n).functioncrearNotaMultilinea(titulo, item1, item2){// Tu código aquíconst nota=`${titulo}-${item1}-${item2}`;return nota;}console.log(crearNotaMultilinea('Nota','Multilínea','Reto6'));module.exports={ crearMensajeBienvenida, concatenarConMas, interpolarVariables, calcularTotalComoString, tipoDeResultadoInterpolado, crearNotaMultilinea,};
¿Cómo se llama la herramienta del editor de código que utiliza el profesor para que muestre los errores?
probablemente sea: Error Lens
La verdad esta clase me sirvió mucho, ya que es como el bue f-string de Python
Creo que hubiese estado cool que el profe hubiese mencionado como se escriben esos acentos chuecos `
Yo los puse con Alt + 96
(por si le sirve a alguien)
Y para mi ejemplo como para seguir con la clase fue este:
let nombre = "Rocky"
let numero_de_pelicula = 4
console.log(Mi pelicula favorita de ${nombre} es la ${numero\_de\_pelicula})
Un dato extra es que tambien pueden usar los template literals en el console log ej:
const nombre = "JVS";
const version = "ES6"
console.log(Bienvenidos a ${nombre}, el cual esta actualmente en la version ${version})