Dúvida sobre como "puxar" a propriedade de um objeto na função

Fiquei com uma dúvida sobre o uso de uma propriedade do objeto dentro de uma função.
Ao tentar usar o ponto para acessar a propriedade, a função simplesmente não funciona, mas ao utilizar o colchetes, ele funciona… Alguém sabe me explicar o motivo?
Fiquei fazendo testes com o console.log() para ter certeza se não tinha escrito nada errado, mas somente trocar o ponto pelo colchetes no código já resolve todo o problema.
Vou deixar abaixo os dois códigos que usei para a resolução. O primeiro não funciona, o segundo funciona.

  **Seu código até o momento**

—> Nesse código, o console.log() que uso para ter certeza que a propriedade foi puxada, me dá resposta “undefined”.
function checkObj(obj, checkProp) {
// Altere apenas o código abaixo desta linha
let teste = obj.hasOwnProperty(checkProp);
let propriedade = obj.checkProp;
if (teste === true) {
console.log(propriedade);
return propriedade;
} else {
return “Not Found”;
}
}

checkObj(
{gift: “pony”, pet: “kitten”, bed: “sleigh”},
“gift”);

Código corrigido
→ Apenas alterei a forma que acesso a propriedade, não consegui entender pq uma dá errado e a outra não.
function checkObj(obj, checkProp) {
// Altere apenas o código abaixo desta linha
let teste = obj.hasOwnProperty(checkProp);
let propriedade = obj[checkProp];
if (teste === true) {
console.log(propriedade);
return propriedade;
} else {
return “Not Found”;
}
}

checkObj(
{gift: “pony”, pet: “kitten”, bed: “sleigh”},
“gift”);

  **Informações de seu navegador:**

Agente de usuário: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36

Desafio: Testar objetos por propriedades

Link para o desafio:

Oi, @Oxyggedon. Aqui temos uma explicação retirada do site que está no link.
Acho uma ótima explicação e, por isso, a reproduzo aqui como está:

Ao usar um ponto, a parte após o ponto deve ser um nome de variável válido e nomeia diretamente a propriedade. Ao usar colchetes, a expressão entre os colchetes é avaliada para obter o nome da propriedade. Enquanto o value.x busca a propriedade do valor chamado “x”, o valor [x] tenta avaliar a expressão x e usa o resultado como o nome da propriedade.

No seu caso, não sabemos se checkProp não é exatamente o nome da propriedade que está no objeto, mas como ela é recebida pela função. Assim sendo, é preciso avaliar o que está dentro de checkProp para saber o nome da propriedade e, assim, é necessário usar colchetes em vez do ponto.
Espero que seja útil. Bons estudos. :slight_smile: