Retorno com `` Crase no JAVASCRIPT

Amigos uma pequena duvida, num dos codigos que escrevi eu fiz o retorno de alguns valores desta maneira:

return { 'Dia_1':'Choveu' }

Quando tentei fazer:

cosnt varX = '1'
return { `Dia_${varX}` :'Choveu' }

da erro na execuçao, alguem sabe o porque isso acontece ? ao meu enteder tanto 'Dia_1' quanto Dia_${varX} sao a mesma string .. ou nao ?

Alguns pontos:

  1. o const está escrito errado.
  2. o return correto seria:
return { [`Dia_${varX}`]: 'Choveu' };

O tabnews cortou as aspas.. mas o correto é envolver o nome do atributo do objeto com [].

Atualizei a sua publicação para colocar a sugestão dentro de um bloco de código JavaScript. Veja se era isso que queria mostrar.
Era isso mesmo, obrigado fera!!
Show de bola, vou testar !!! Agradeço demais

Complementando os demais (que já mostraram como resolver: colocando a expressão entre colchetes), o nome disso é "Computed property names".

Basicamente, se o nome de uma propriedade é dinâmico, precisa estar entre colchetes. Veja a diferença:

const nomePropriedade = 'abc';

// sem colchetes, "nomePropriedade" é literalmente o nome da propriedade
console.log({ nomePropriedade: 1 });   // { nomePropriedade: 1 }

// com colchetes, o nome da propriedade será o valor da variável nomePropriedade
console.log({ [nomePropriedade]: 1 }); // { abc: 1 }

Por isso que no seu caso - como já apontado pelos demais - deveria ser return { [`Dia_${varX}`] :'Choveu' }.


Vale lembrar que você pode usar qualquer expressão, que o resultado será convertido para string e usado como o nome da propriedade:

const nome = 4;

// resultado da conta é 0.8, que é convertido para string e passa a ser o nome da propriedade
console.log({ [ (nome * 2) / 10 ]: 1 }); // { '0.8': 1 }

function fazAlgo(x) {
    return 'algo' + x;
}
console.log({ [ fazAlgo(nome) ]: 1 }); // { algo4: 1 }

const obj = {
    toString: function() {
        return 'nome qualquer';
    }
}
// obj é convertido para string (implicitamente chama obj.toString())
console.log({ [ obj ]: 1 }); // { 'nome qualquer': 1 }

// até mesmo a função é convertida para string
console.log({ [ function () { return 42 } ]: 1 }); // { 'function () { return 42 }': 1 }
Uma explicaçao melhor que a outra, show !!! Obrigado !!!

https://jsfiddle.net/u0twL4de/4/

dá uma olhada ae

Quando usamos propriedades de objetos de forma dinâmica, precisamos do [ ]

const dia = 1

console.log({
	[`dia_${dia}`]: 'choveu'
})

const dias = [1,2,3,4,5]
const choveu = [true, false, true, false, false]

const obj = dias.map( (dia,index) => ({ [`dia_${dia}`] : choveu[index] }) )
console.log(obj)
Show de bola Dan, vlw pela explicaçao !!!