DEV Community

Cover image for JavaScript: Para que serve o comando eval?
Cristian Magalhães
Cristian Magalhães

Posted on • Edited on

JavaScript: Para que serve o comando eval?

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.

Image description

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 🙃

Links úteis

Top comments (1)

Collapse
 
evertontcianduniproof profile image
Everton Tci Uniproof

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 .