"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > `eval()` e `new Function()` são verdadeiramente intercambiáveis ​​​​em JavaScript?

`eval()` e `new Function()` são verdadeiramente intercambiáveis ​​​​em JavaScript?

Publicado em 2024-11-20
Navegar:484

Are `eval()` and `new Function()` Truly Interchangeable in JavaScript?

Aprofundando a distinção: eval() e new Function() são intercambiáveis ​​em JavaScript?

Muitas vezes em JavaScript, encontramos funções como eval() e nova função(). Embora sua sintaxe possa parecer semelhante à primeira vista, um exame mais detalhado revela diferenças fundamentais em seu comportamento.

Considere as seguintes funções de instrução única:

var evaluate = function(string) {
    return eval('('   string   ')');
}

var func = function(string) {
    return (new Function( 'return ('   string   ')' )());
}

console.log(evaluate('2   1'));
console.log(func('2   1'));

Essas duas funções são idênticas em suas operações? Ao contrário da crença popular, eles não são.

eval() vs. nova Função()

  • eval(): Interpreta uma string como uma expressão JavaScript dentro do escopo de execução atual. Possui a capacidade de acessar variáveis ​​locais.
  • nova Função(): Constrói um objeto de função a partir de uma string contendo código JavaScript. Esta função é executada em um escopo separado, isolando-a das variáveis ​​locais.

Para ilustrar essa diferença, considere a seguinte função:

function test1() {
    var a = 11;
    eval('(a = 22)');
    alert(a);            // alerts 22
}

Neste exemplo, eval() modifica a variável local 'a' dentro da função test1(), resultando em um alerta de 22. No entanto, se usarmos new Function('return (a = 22);')(), a variável local 'a' permaneceria inalterada.

Implicações e cuidados

Enquanto ambos eval() e new Function() servem aos seus propósitos, é crucial observar que eval() acarreta riscos de segurança inerentes. Sua capacidade de acessar variáveis ​​locais e potencialmente modificar o escopo global pode levar a consequências indesejadas.

Como resultado, geralmente é aconselhável evitar o uso de eval() a menos que seja absolutamente necessário. Dados não confiáveis ​​passados ​​para eval() podem comprometer a segurança da sua aplicação. Da mesma forma, new Function() deve ser empregado com cautela ao lidar com entradas não confiáveis.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3