No JavaScript, você pode usar a função Eval () para analisar o código JavaScript em uma string e retornar o resultado de execução de código correspondente:
A cópia do código é a seguinte:
console.log (Eval ("42 * 2")); // 84
Eval () é essencialmente uma função de um objeto global JavaScript. Por exemplo, o código acima é equivalente a:
A cópia do código é a seguinte:
console.log (this.eval ("42 * 2")); // 84
No entanto, ao usar a instrução EVALL (), o primeiro método mencionado acima é geralmente adotado, ou seja, ignore o objeto global e use o EVAL () diretamente.
Uso de avaliar ()
Pelas duas razões a seguir, a menos que você realmente precise, tente evitar o uso da instrução EVALL () em seu código:
1. Logicamente falando, as strings devem ser usadas para armazenar conteúdo e informações durante a operação do programa, em vez de armazenar lógica de cálculo específica.
2. Como o parâmetro Eval () é uma string e não pode ser lexical para um pedaço de string, o intérprete JavaScript não pode otimizar para a instrução de chamada avaliativa ().
Valor de retorno de Eval ()
O valor de retorno de avaliar () segue as seguintes regras:
1. Se o parâmetro de Eval () não for uma string, avaliar () () retornará diretamente o parâmetro.
2. Se o parâmetro de avaliar () for uma string, avaliar a string no código e executá -la e retorna o resultado da última linha de execução do código.
3. Se a string não puder ser analisada em código legítimo, avaliar () () lançará um erro de sintaxe.
4. Se uma string puder ser analisada em código legal, mas um erro será relatado durante a execução deste código, o erro será relatado na instrução EVALL () e jogado por Eval ().
A cópia do código é a seguinte:
console.log (Eval ([1,2,3])); // [1, 2, 3]
console.log (tipo de avaliação ([1,2,3])); // objeto
console.log (Eval ("42 */2")); // SyntaxError
console.log (Eval ("42 * 2; 22 * 3;")); // 66. Eval retorna o resultado da última expressão/declaração
console.log (EVALL ("null.toString ()")); // typeError, a exceção no código avaliada será propagada fora de avaliação ().
ambiente variável
Eval () no JavaScript possui um recurso importante: o código na sequência de parâmetros Eval () pode acessar variáveis no código externo e também pode expor as variáveis recém -criadas no código da string do parâmetro ao código externo. Ou seja, se a sequência de parâmetros EVALL () puder ser analisada legalmente, JS substituirá o código analisado pela linha em que avaliar ():
A cópia do código é a seguinte:
// ambiente variável
var a = 108;
console.log (avaliar ("function duplo (x) {return x*2;} a = duplo (a)"));
console.log (a); // 216
console.log (duplo (33)); // 66
Vale a pena notar que o pré -requisito para implementar o recurso acima é que o código na sequência de parâmetro Eval () pode ser analisado legalmente. Além da sintaxe do código correto, o JS também exige que o código na sequência de parâmetros Eval () seja "auto-organizado": o código deve fazer sentido apenas em termos do código na sequência do parâmetro. Por exemplo, é impossível passar uma string como "Return"; para a função EVALL ():
A cópia do código é a seguinte:
function test () {
var s = "teste";
Eval ("Return s;");
}
test (); // SyntaxeRor: retornar não na função
Se você usar a função Eval () diretamente, as variáveis acessadas pelo código na sequência de parâmetros Eval () são essas variáveis na função em que a instrução EVALL () está localizada, ou seja, o ambiente variável usado pela função Eval () é o "ambiente variável local". Se você não usa a função Eval () diretamente, mas use uma nova variável que também aponte para a função Eval (), as variáveis acessadas pelo código na sequência de parâmetros correspondentes são variáveis globais, ou seja, o ambiente variável usado pela função Eval () é "ambiente variável global":
A cópia do código é a seguinte:
// ambiente variável local e ambiente variável global
var renomeado = avaliação;
var x = "origem", y = "origem";
função f () {
var x = "novo";
avaliar ("x += 'alterado';");
retornar x;
}
função g () {
var y = "novo";
renomeado ("y += 'alterado';");
retornar y;
}
console.log (f (), x); // Origem newchanged
console.log (g (), y); // novo OriginChanged
No entanto, vale a pena notar que o comportamento no IE6, 7 e 8 é diferente. No IE6, 7 e 8, mesmo que a função Eval () seja renomeada, o "ambiente variável local" ainda é usado.