Eval на самом деле является мощной функцией, и есть некоторые вещи, которые невозможно обойтись без него.Например:
- Оценить код, полученный с удаленного сервера.(Скажем, вы хотите создать сайт, которым можно удаленно управлять, отправив на него код JavaScript?)
- Оцените пользовательский код.Без eval вы не можете программировать, например, онлайн-редактор / REPL.
- Динамически создавать функции произвольной длины (function.length только для чтения, поэтому единственный способ использовать eval).
- Загрузка скрипта и возвращение его значения.Если ваш скрипт является, например, функцией с самовозвратом, и вы хотите оценить ее и получить ее результат (например:
my_result = get_script_result("foo.js")
), единственный способ программирования функции get_script_result - использовать внутри нее eval. - Повторное создание функции в другом замыкании.
И все, что вы хотели бы сделать, - это создавать код на лету.
Причина, по которой его считают "злым", заключается в том, что он классически используется новичками для того, чтобы делать то, что язык может обрабатывать изначально.Например, код ниже:
age_of_erick = 34;
age_of_john = 21;
person = "erick";
eval("console.log('age_of_"+person+"')");
И код ниже:
age = {erick:34, john:21};
person = "erick";
console.log(age["erick"]);
Оба делают одно и то же, за исключением того, что один анализирует строку, генерирует код из нее,компилируется в машинный код и затем запускает , а другой читает значение из хеша , что намного быстрее.