Complementando:
Sobre o "usar condições", na verdade não se restringe a isso. Você pode colocar qualquer expressão válida que retorne algum valor, e este será impresso. Exemplos:
const x = 10.4;
// Arrendondando e somando 10: 20
console.log(`Arrendondando e somando 10: ${Math.round(x) + 10}`);
const a = 1;
const b = 2;
// a + b = 3
console.log(`a + b = ${a + b}`);
const valor = 1234.56;
// O valor é R$ 1.234,56
console.log(`O valor é ${valor.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' })}`);
Lembrando que o resultado da expressão sempre é convertido para string, seguindo determinadas regras descritas na documentação. Por exemplo, eu posso definir um formato específico para objetos arbitrários, bastando criar um método toString
:
const obj = {
nome: 'Fulano',
nomes_do_meio: ['Castro', 'Souza', 'Ramos'],
sobrenome: 'Silva'
};
// ao colocar obj dentro de uma template string, será mostrado o retorno de toString()
obj.toString = function () {
return `${this.nome} ${this.nomes_do_meio.join(" ")} ${this.sobrenome}`;
}
console.log(`Nome completo: ${obj}`); // Nome completo: Fulano Castro Souza Ramos Silva
Assim, quando obj
estiver dentro de uma template string, a string retornada por toString
será impressa.
Note que dentro de toString
usei outra template string para concatenar os nomes.
Por fim, tem uma outra forma de uso (menos comum, pelo que vejo), que é definindo uma função que processa o template:
function corrigePlural(partes, quantidade) {
let [texto1, texto2] = partes; // texto1 = "Total: ", texto2 = " unidade";
if (quantidade > 1) {
texto2 += "s"; // se quantidade for maior que 1, muda a palavra para o plural
}
// retorna o texto corrigido, formatando o número e adiciona um ponto final
return `${texto1}${quantidade.toString().padStart(3, '0')}${texto2}.`;
}
let qtd = 1;
console.log(corrigePlural`Total: ${qtd} unidade`); // Total: 001 unidade.
qtd = 4;
console.log(corrigePlural`Total: ${qtd} unidade`); // Total: 004 unidades.
No caso, o template chama a função corrigePlural
. O primeiro argumento é um array contendo as partes que não estão dentro de ${}
. E os demais parâmetros são os valores que estão nos placeholders. Assim, eu posso manipular os valores à vontade, deixando a string do jeito que eu precisar.