Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] As novas propriedades não se sujeitam ao "hoisting"

Olá a todos! Fiquei com uma dúvida durante a aula. Na aula declaramos um objeto com as propriedades nome e profissão. Quando acessamos via console.log vemos eles ali. Se queremos consultar alguma propriedade que não foi declarada, por exemplo o telefone, vamos ter o undefined como retorno no console.log. Após quando declaramos apenas a propriedade pessoa.telefone = "11 0320202" e rodamos um console.log ele vai retornar o número declarado, mas o console anterior continuara com o undefined. E se alterarmos o nome, incluindo o sobrenome teremos no novo console a alteração, mas o anterior fica como era. Minha dúvida é, essas novas propriedades não sofrem com o "hoisting"? Se eu entendi direito ao longo de outros cursos, o "hoisting" faz com que aquele valor que foi declarado dentro do código seja "levado" para o início do código evitando assim que ao ser chamado antes da declaração ele retorne o valor. Isso acontece nas variáveis let e var, se não estiver enganado.

Abaixo deixo o código que escrevemos em aula pra ficar mais claro.

const pessoa = {
    nome: "Pedro",
    profissao: "Engenheiro",
}

console.log(pessoa.nome);

//E se a gente buscar a o telefone dessa pessoa. Vai retornar undefined porque esse valor não foi definido.

console.log(pessoa.telefone);

//Se a for declarado fora da variavel. ele ira aparecer no próximo console, mas não acontece o hoisting, ou seja, não vai "subir" para o inicio do código, sendo aplicado apenas após a declaração.

pessoa.telefone = "14 2524655";

console.log(pessoa.telefone)

//Podemos alterar uma propriedade que já foi declarada. E quando consultamos a variável, iremos ver todas as alterações e inclusões feitas.

pessoa.nome = "Pedro Ivo"
console.log(pessoa)

Obrigado!

1 resposta
solução!

Oi Pedro, tudo bem?

O "hoisting" é um comportamento que ocorre com as declarações de variáveis, onde elas são "elevadas" para o topo do escopo antes da execução do código. Isso evita que ocorram erros ao tentar acessar uma variável antes de ela ser declarada.

No entanto, no caso dos objetos, o "hoisting" não se aplica da mesma forma. Quando declaramos um objeto com algumas propriedades, como no exemplo que você deu, essas propriedades são definidas no momento da criação do objeto e podem ser acessadas normalmente. Mas se tentarmos acessar uma propriedade que não foi declarada previamente, receberemos o valor undefined, como você mencionou.

Agora, quando adicionamos uma nova propriedade ao objeto, como no caso do telefone, essa propriedade não é "elevada" para o topo do código. Ela é adicionada ao objeto somente quando a linha de código correspondente é executada. Por isso, se você acessar o objeto antes de adicionar a propriedade, ela não estará presente e você receberá undefined. Mas se você acessar o objeto após adicionar a propriedade, ela estará presente e você verá o valor correspondente.

Um abraço e bons estudos.