1
resposta

[Dúvida] Condição if

Bom dia, pessoal!

Tentei incrementar o código final do curso para que quando o usuário inserir um elemento que não seja do tipo áudio, ela receba a mensagem "Erro! O elemento é um BUTTON (por exemplo) por favor, selecione um elemento áudio". Porém, ocorre um erro quando o objeto é nulo, ele mostra a mensagem "Elemento não encontrado" mas também mostra o erro "Uncaught TypeError: Cannot read properties of null (reading 'localName')", pois nulo não retorna o localName uma vez que nulo não existe.

Minha dúvida é: a primeira verificação if (elemento === null) , se for verdadeira, não deveria parar por aí e não continuar a ler o resto do código? Então por quê ainda dá esse erro do localName se ele se encontra apenas no else?

function tocaSom (seletorAudio) {
    const elemento = document.querySelector(seletorAudio); 


    if (elemento === null) {
        console.log('Elemento não encontrado');
    }

    if (elemento && elemento.localName === 'audio') {
        elemento.play();
    }

        else {
        const tipo_tag = document.querySelector(elemento.localName);
        console.log(`Erro! O elemento é um ${tipo_tag} por favor, insira um elemento áudio`);
        }
    }
1 resposta

Oi Bárbara! Eu acredito que seja porque o else está fazendo parte apenas do segundo if. Teria que ficar dessa forma:

function tocaSom (seletorAudio) {
    const elemento = document.querySelector(seletorAudio); 


    if (elemento === null) {
        console.log('Elemento não encontrado');
    } else if (elemento && elemento.localName === 'audio') {
        elemento.play();
    } else {
        const tipo_tag = document.querySelector(elemento.localName);
        console.log(`Erro! O elemento é um ${tipo_tag} por favor, insira um elemento áudio`);
        }
    }

Ah gostei muito de você usar template string na mensagem de erro! Bom, esse é meu entendimento, se mais alguém puder ajudar vai ser muito bom :)