Voltando a falar novamente sobre alguns comandos do JavaScript, dessa vez eu gostaria de falar um pouco sobre o comando eval. Explicar o que ele faz, os perigos de se usar e dar exemplos de uso.
O que ele faz?
Bom basicamente essa função recebe uma string e a interpreta como código Javascript e executa esse código.
Exemplo
Vamos começar com algo bem simples se formos no nosso console do navegador e escrevermos o código alert('oi')
o comando vai ser interpretado e vai aparecer uma caixa de alerta no navegador. Porém se eu executar o mesmo código em volta de uma string "alert('oi')"
ele não será interpretado pelo navegador e apenas vai se repetir na linha abaixo. Agora se eu rodar o seguinte comando eval("alert('oi')") a caixa de alerta do navegador volta a aparecer, porque o comando eval pega a string passada a ele como parâmetro e executa como um código JavaScript normal.
Casos de uso
Abaixo fiz um código bem simples de um momento que seja relevante usar o eval. Vê que para cada figura nós temos um equação diferente para calcular a área. Então posso criar uma função para fazer isso ou ter a equação no banco, mas nesse caso por algum motivo nós vamos querer ter as equações no banco.
Então basicamente o código pega a string com a equação, substitui os seus parâmetros executa e mostra o resultado.
Pontos de atenção
Apesar de ser um comando poderoso, o eval também é muito perigoso. Pois como eu disse anteriormente ele interpreta código JS, o que acaba sendo um perigo quando não usado com cautela, fazendo com que você sofra um code injection por exemplo. Abaixo alguns pontos para você pensar quando for usar o eval.
- O mal uso do eval pode levar code injection
- Fica mais dificil de debugar código, pois dentro do eval os erros não tem indicação de linha
- Dificulta a minificação do código
Function uma alternativa para o eval
Diferente do eval o construtor Function
cria um novo objeto Function
assim criando funções dinamicamente, diferente do eval que executa de cara o seu código JS. E outra particularidade muito importante as funções criadas usando o Function
executam somente no escolo global. Como o objetivo do artigo não é falar sobre esse construtor recomendo caso tenha curiosidade ler um pouco mais sobre ele nas docs da mozzila sobre o Function
Muito obrigado por ler 🙃
Top comments (1)
evoluindo sempre o próximo podemos marca para fazer juntos top o post ficou bacana e bem explicado , parabéns vc está cada vez mais uma referencia .