Executando verificação de segurança...
2

Só uma coisa, não sei se foi erro ao copiar o código do curso, mas a área do triângulo está errada:

function calcularAreaTriangulo(){
    const base = prompt(`Digite a base do triangulo`)
    const altura = prompt(`Digite a altura do triangulo`)
    return base * altura
}

Deveria ser return (base * altura) / 2.

De qualquer forma, sim, sempre tem várias maneiras de fazer. Eu só questiono na sua solução, se era realmente necessário criar as funções dentro de cada case. Se for pra ser assim, era melhor nem ter as funções e fazer tudo direto. Por exemplo:

case `1`:
    let baseTriangulo = Number(prompt(`Digite a base do triangulo`))
    let alturaTriangulo = Number(prompt(`Digite a altura do triangulo`))
    alert((baseTriangulo * alturaTriangulo) / 2);
    break;

E uma preocupação que vc teve foi converter para número, que não foi feito no código do curso. Claro que o JavaScript converte os valores automaticamente e na maioria das vezes "funciona", mas enfim, eu ainda prefiro fazer a conversão, como vc fez, e ainda acrescentaria uma validação.


Se for pra ter algo mais flexível, poderia ter um mapeamento entre as opções e as respectivas funções (também arrumei os nomes de algumas, como calculaLadoQuadrado e calcularRaioCirculo, que acho que deveriam ser respectivamente calcularAreaQuadrado e calcularAreaCirculo):

// lê e converte para número, pede para digitar de novo se for inválido
function lerNumero(msg) {
    while (true) {
        const numero = parseFloat(prompt(msg));
        if (isNaN(numero)) {
            alert('Não foi digitado um número válido');
        } else {
            return numero;
        }
    }
}

function calcularAreaTriangulo() {
    const base = lerNumero('Digite a base do triangulo');
    const altura = lerNumero('Digite a altura do triangulo');
    return (base * altura) / 2;
}

function calcularAreaRetangulo() {
    const base = lerNumero('Digite a base do retangulo');
    const altura = lerNumero('Digite a altura do retangulo');
    return base * altura;
}

function calcularAreaQuadrado() {
    const lado = lerNumero('Digite o lado do quadrado');
    return lado * lado;
}

function calcularAreaTrapezio() {
    const baseMaior = lerNumero('Informe a base maior');
    const baseMenor = lerNumero('Informe a base menor');
    const altura = lerNumero('Informe a altura');
    return (baseMaior + baseMenor) * altura / 2;
}

function calcularAreaCirculo() {
    const raio = lerNumero('Informe o raio do circulo');
    return 3.14 * raio * raio;
}

// cada opção tem um texto do menu e a respectiva função que é executada
const opcoes = {
    '1': ['calcular área do triângulo', calcularAreaTriangulo],
    '2': ['calcular área do retângulo', calcularAreaRetangulo],
    '3': ['calcular área do quadrado', calcularAreaQuadrado],
    '4': ['calcular área do trapézio', calcularAreaTrapezio],
    '5': ['calcular área do círculo', calcularAreaCirculo]
};
const opcaoSair = '6';

// constrói a mensagem com base nas opções
let mensagem = '';
for (const [opcao, [msg, _]] of Object.entries(opcoes)) {
    mensagem += `${opcao} - ${msg}\n`;
}
mensagem += `${opcaoSair} - Sair`;

while (true) {
    const opcao = prompt(mensagem);
    if (opcao == opcaoSair) {
        alert('Saindo');
        break;
    } else if (opcao in opcoes) {
        alert(`resultado: ${opcoes[opcao][1]()}`); // executa a respectiva função
    } else {
        alert('opção inválida');
    }
}

Assim fica mais fácil adicionar, remover ou até mesmo trocar funcionalidades: basta mudar o objeto opcoes. O while continua igual, independente da quantidade de opções - aliás, eu prefiro assim: um loop infinito, que só é interrompido se a opção de sair for escolhida. E repare que para a opção eu não converto para número, pois o objeto opcoes poderia ter textos como opções.


Outra opção é mudar um pouco o objeto opcoes para deixar mais claro o que é cada valor:

const opcoes = {
    '1': { textoMenu: 'calcular área do triângulo', funcao: calcularAreaTriangulo },
    '2': { textoMenu: 'calcular área do retângulo', funcao: calcularAreaRetangulo },
    '3': { textoMenu: 'calcular área do quadrado', funcao: calcularAreaQuadrado },
    '4': { textoMenu: 'calcular área do trapézio', funcao: calcularAreaTrapezio },
    '5': { textoMenu: 'calcular área do círculo', funcao: calcularAreaCirculo }
};
const opcaoSair = '6';

// constrói a mensagem com base nas opções
let mensagem = '';
for (const [opcao, value] of Object.entries(opcoes)) {
    mensagem += `${opcao} - ${value.textoMenu}\n`;
}
mensagem += `${opcaoSair} - Sair`;

while (true) {
    const opcao = prompt(mensagem);
    if (opcao == opcaoSair) {
        alert('Saindo');
        break;
    } else if (opcao in opcoes) {
        alert(`resultado: ${opcoes[opcao].funcao()}`); // executa a respectiva função
    } else {
        alert('opção inválida');
    }
}

Ah, e também coloquei ponto-e-vírgula no final das linhas. Pode parecer "frescura", e sei que o JavaScript "aceita" o código sem ponto e vírgula e "funciona", mas isso evita algumas situações bizarras que podem ocorrer se você não usá-los, como essa e essa (veja mais sobre isso aqui).

Carregando publicação patrocinada...
1

Cara no curso a funçao return (base * altura)/2 nao estava escrita com os parenteses
e eu vou dar uma olhada e tentar entender esse codigo que voce me forneçeu para adiquirir mais logica obg !!!

2

Nesse caso específico o parênteses não faz diferença porque a multiplicação e divisão tem a mesma precedência e acabam sendo executados na ordem correta.