Executando verificação de segurança...
2

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 ?

Carregando publicação patrocinada...
3

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 [].

2
1
1
3

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 }
1
2

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)
1