Bom dia, Rosemberg.
Muito bem!
Não há problema nenhum em imprimir tudo em apenas um console.log, vai depender da sua regra de negócio.
Com relação à sua dúvida:
- Na 'minha cabeça' ano de publicação foi definido dentro do objeto livro, não foi?
Seria, mas o erro acontece dentro do objeto livro.
const livro = {
titulo: 'Missão Secreta na Transamazonica',
autor: 'Assis Brasil',
anoPublicacao: 2000,
idadePublicacao: anoAtual - anoPublicacao, // O erro está aqui, pois você está chamando anoPublicacao, sendo que esse atributo nem sequer existe ainda, pois o livro não foi definido. ainda. Caso existisse, ele seria acessado por this.anoPublicacao, mas ele ainda estava na metade da execução, então nem o this se refere a ele ainda.
genero: 'Suspense'
}
Para isso você deveria definir antes o ano de publicação, assim:
const anoAtual = new Date().getFullYear();
const anoPublicacao = 2000;
const livro = {
titulo: 'Missão Secreta na Transamazonica',
autor: 'Assis Brasil',
anoPublicacao: anoPublicacao,
idadePublicacao: anoAtual - anoPublicacao,
genero: 'Suspense'
}
console.log(`${livro['titulo']}, ${livro['autor']}, ${livro['anoPublicacao']}, ${livro['idadePublicacao']}, ${livro['genero']}`);
Ou passar o 2000 hard coded para a idadePublicacao.
Outra dica, se tiver uma dúvida, colocar a tag de dúvida no tópico do fórum ajuda, pois às vezes eu, ou outras pessoas que vêm aqui tirar dúvidas podemos acabar passando reto achando que não tem dúvidas e nem abrimos o tópico para ver (o scuba team vê tudo, eu acho, mas mesmo para eles se organizarem é bom colocar as tags).