Olá pessoal, tudo bem?
Acho que tem um pequeno erro no exemplo que a professora Ju colocou sobre o tratamento dos parâmetros cujos valores não são strings pro JS.
Na condicional ela coloca como "e", quando na verdade deveria ser "ou" para a verificação de se o objeto é um tipo "object" ou "function", neste caso, visto que o mesmo parâmetro não pode ser de dois tipos simultaneamente, o código nunca iria cair nessa condição.
O trecho é o seguinte.
// código omitido
for (let chave in estudante) {
const tipo = typeof estudante[chave];
if (tipo !== 'object' && tipo !== 'function')
const texto = `a chave ${chave} tem o valor ${estudante[chave]}`
console.log(texto);
}
No meu teste eu fiz alguns outros ajustes, mas também considerei como uma condição de "e":
//criando um objeto com um outro objeto como parâmetro
const objetoComObjetoDentro = {
tipo: 'hobbit',
nome: 'frodo',
categoria: 'bolseiro',
filme: 'senhor dos aneis',
// objeto como parametro:
ranqueadores: [{
nome: 'imdb',
notaCritica: 8,
notaPublico: 9.5,
disponibilidade: 'Amazon Prime',
},
{
nome: 'rotten tomatoes',
notaCritica: 8.1,
notaPublico: 9.8,
disponibilidade: 'Netfix'
}]
}
// quando existem objetos como parâmetros, o JS não lista pois ele só faz a iteração com strings.
// neste caso é necessário colocar uma condição para tratar somente as saídas que são vistas como strings
for (atributos in objetoComObjetoDentro){
//condição para verificar se o parâmetro é um objeto ou uma função e envia mensagem de alerta
if (typeof(objetoComObjetoDentro[atributos]) == 'object' || typeof(objetoComObjetoDentro[atributos]) == 'function'){
console.log(`O atributo ${atributos} é do tipo ${typeof(objetoComObjetoDentro[atributos])}`)
}
//caso o Parâmetro não seja um objeto ou uma função, ele faz a listagem
else{
console.log(`Atributo: ${atributos} \n Valor: ${objetoComObjetoDentro[atributos]} \n `)
}
}
Minha análise está correta?
Valeu!!