Eval не всегда зло. Есть моменты, когда это совершенно уместно.
Однако eval в настоящее время и исторически массово используется людьми, которые не знают, что они делают. К сожалению, это включает людей, пишущих учебники по JavaScript, а в некоторых случаях это может иметь последствия для безопасности - или, чаще, простые ошибки. Таким образом, чем больше мы можем сделать, чтобы поставить вопросительный знак над eval, тем лучше. Каждый раз, когда вы используете eval, вам нужно проверять, что вы делаете, потому что есть вероятность, что вы можете сделать это лучше, безопаснее и чище.
Чтобы дать слишком типичный пример, установить цвет элемента с идентификатором, хранящимся в переменной 'potato':
eval('document.' + potato + '.style.color = "red"');
Если бы авторы приведенного выше кода имели представление об основах работы объектов JavaScript, они бы поняли, что вместо литеральных точечных имен можно использовать квадратные скобки, устраняя необходимость в eval: *
document[potato].style.color = 'red';
... который намного легче читать, а также менее потенциально глючит.
(Но тогда кто-то, кто / действительно / знал, что они делают, скажет:
document.getElementById(potato).style.color = 'red';
, что более надежно, чем хитрый старый прием доступа к элементам DOM прямо из объекта документа.)