♫ in the jungle, the mighty jungle, the lion sleeps tonight ♫
O que é Eval?
Eval é um comando que converte um código representado por uma string em uma execução de comando.
Como utilizar Eval?
A sintaxe do comando
eval
é o seguinte:
Javascript:
eval(string);
Composto pela palavra-chave
eval
, depois - entre parênteses - um código representado em string. Veja um exemplo:
Javascript:
let olaMundo = "console.log('Hello world!')";
eval(olaMundo);
// Saída: Hello world!
Neste exemplo, é executado no
eval
um contexto de código que está em formato de string, neste caso, console.log('Hello world!')
. Ao executá-lo, o comando em string é convertido, compilado e executado como um comando Javascript.Quando utilizar Eval?
Existe alguns sistemas feitos em Javascript onde o Eval é necessário para executar uma expressão composta de códigos ou expressões matemáticas. Por exemplo, um sistema simples de calculadora onde os cálculos são armazenados em uma string e, para poder obter o resultado desse cálculo, é feito uma conversão de string para um código em Javascript. Veja como ficaria a execução desse sistema:
Javascript:
function calcular(calculo) {
return eval(calculo);
}
console.log(calcular("2 + 4"));
// Saída: 6
Apesar de parecer um comando útil para certas ocasiões, não é recomendado utilizá-lo, pois, segundo a documentação disponibilizado em MDN Web Docs:
eval() é uma função perigosa, que executa o código passado com os privilégios do caller. Se você executar o eval() com uma sequência de caracteres que podem ser afetados por uma parte maliciosa, você pode acabar executando código malicioso na máquina do usuário com as permissões da sua página/extensão. Mais importante ainda, o código de terceiros pode ver o escopo em que eval() foi chamado, o que pode levar a possíveis ataques como Function não é suscetível.
eval() é geralmente mais lento do que as alternativas, uma vez que tem de invocar o interpretador JS, enquanto muitos outros construtores são otimizados por engines de JS modernos.
Os interpretadores modernos convertem javascript em código de máquina. Resumindo, o nome das variáveis será desmanchado. Portanto, o uso de eval forçará o navegador a fazer buscas caras para descobrir o endereço e seu valor no código de máquina. Além disso, novos valores podem ser introduzidos em eval como mudanças no tipo da variável, fazendo o navegador recalcular todo o código de máquina gerado anteriormente. Felizmente, existem alternativas mais seguras (e rápidas) ao eval() para usos comuns.
Mais informações:
Última edição: