Oi David!
Existem dois jeitos de acessar as propriedades de um objeto: acessar pelo operador .
ou acessar pela chave da propriedade (o nome da propriedade em string) dentro dos colchetes. Supondo que temos um objeto Pessoa, com as propriedades nome
e sobrenome
, podemos acessá-las dessas duas maneiras:
pessoa.nome
pessoa["nome"]
e
pessoa.sobrenome
pessoa["sobrenome"]
Quando sabemos com certeza qual propriedade vamos precisar, o operador .
é a forma mais fácil e objetiva.
Vamos supor que temos uma função que retorna ou o nome ou o sobrenome da pessoa, podemos criar essa função assim:
function nomeOuSobrenome(pessoa, chave) {
if(chave== "nome) {
return pessoa.nome
}
else if(chave== "sobrenome") {
return pessoa.sobrenome
}
else return "valor inválido"
}
Com duas propriedades, é simples realizar isso com 2 ifs. Mas imagine que temos 10 propriedades, teríamos que fazer 10 ifs e retornar a propriedade que tem a chave igual ao parâmetro chave da função.
function nomeOuSobrenome(pessoa, chave) {
if(chave!= "nome" && chave!= "sobrenome") return "valor inválido"
return pessoa[valor]
}
Na função acima, podemos passar como valor em chave
o nome da propriedade que queremos acessar. Por exemplo, se passarmos "nome"
como parâmetro, a função retornará pessoa["nome"]
que é a mesma coisa que pessoa.nome
.
var nome = nomeOuSobrenome(pessoa, "nome");
console.log(nome) //imprime o nome da pessoa
Ou seja, quando não sabemos ao certo qual propriedade vamos acessar, acessar as propriedades com [chave] é uma boa solução.
No código que você postou na pergunta, é exatamente isso que acontece. Não sabemos ao certo qual tipo de erro de input vai vir, quem decide isso é quem está chamando a função.
Para a sua segunda pergunta, é possível sim acessar objetos dentro de objetos por meio do .
e também dos colchetes. Isso não é exclusivo do javascript, outras linguagens também são capazes de realizar este comando.
No momento não me recordo se em algum curso específico isso é abordado, as segue o post na MDN sobre este assunto.
Essa pergunta foi meio extensa, então caso não tenha entendido alguma coisa, pergunte aqui de novo! Espero ter ajudado! :)