Подтвердить что ты не робот

Какое основное преимущество использования eval() в JavaScript?

Я знаю, что это может быть вопрос новичков, но мне интересно узнать о главном преимуществе eval() - где его лучше всего использовать? Я ценю любую информацию.

4b9b3361

Ответ 1

Лучше всего использовать функцию eval: Никогда.

Цель состоит в том, чтобы оценить строку как выражение Javascript. Пример:

eval('x = 42');

Это использовалось много раньше, потому что многие люди не знали, как написать правильный код для того, что они хотели сделать. Например, при использовании динамического имени для поля:

eval('document.frm.'+frmName).value = text;

Правильный способ сделать это:

document.frm[frmName].value = text;

Как метод eval выполняет строку как код, каждый раз, когда он используется, это потенциальное открытие для того, чтобы кто-то вводил вредоносный код на странице. См. межсайтовый скриптинг.

Существует несколько законных применений для функции eval. Однако вряд ли вы когда-нибудь окажетесь в ситуации, когда вам это действительно понадобится.

Ответ 2

Это довольно старый вопрос, и, возможно, люди в то время не думали о случаях использования eval(). Одно из преимуществ использования eval() заключается в том, что вы выполняете горячую перезагрузку в потоке разработки вашего бэкэнда или интерфейса.

В принципе eval() может позволить вам редактировать код в вашем редакторе и исправлять его запущенное приложение без его перезапуска и без потери состояния (в зависимости от реализации). Вам понадобится связанный код, который следит за изменениями файлов и каким-то образом отправляет изменения в ваше приложение, но eval() в конечном итоге является методом преобразования этих изменений в фактические js.

РЕДАКТИРОВАТЬ

Другой случай использования, с которым я столкнулся:

Вы можете использовать eval() для обхода процесса компиляции webpack в случаях, когда вы хотите динамически требовать файлы, которые вы не хотите пересылать (например, json) Например:

const data = eval('require')('./emails/${recipient}/${type}.json')

В этой заметке я считаю, что совершенно неправильно писать выражение, например, eval() является злым или никогда не должно использоваться. Такие заявления, как это, являются настоящим злом!

Ответ 3

eval позволяет выполнить (или оценить) строку кода javascript.

Таким образом, это применимо, когда вы хотите, чтобы кто-то выполнил строку кода javascript. Например, в учебной статье о JavaScript, поэтому читатель может сразу попробовать:)

Или, если ваш сайт ориентирован на программистов, вы можете захотеть, чтобы они записывали и выполняли свои собственные плагины.

Ответ 4

eval() не следует использовать в Javascript.

eval() используется для разбора строк JSON, но это использование было заменено более быстрым и безопасным JSON.parse.

Ответ 5

Лучшая цель использования eval - динамически загружать код, генерировать код во время выполнения и делать подобные метапрограммы. В общем, если вы можете сделать то же самое без eval, не используйте eval.

Ответ 6

Вы можете запустить JS, который хранится в значении поля на веб-странице.

Вы можете использовать eval с JS, это просто то, что тогда ваш код более эффективен для атаки. Пока он не использует AJAX, проблем с сервером нет.

Если вы используете eval, вы должны разобрать символы [() < > {}]

Ответ 7

eval() = evil

Вы не должны использовать его вообще. Его можно использовать для простой вставки кода, но кто-то может вставить плохие скрипты с помощью eval(). Иногда люди используют eval() для разбора JSON или

eval("obj." + id);   //newbies

но на самом деле вы можете достичь всего этого без использования eval().

obj[id];             //should-do

Ответ 8

Как было сказано ранее, существует потенциальный риск при использовании eval(), Если вы хотите оценить строку как выражение, вы можете использовать ${} для выражения выражения, введенного в ECMA-6

Ответ 9

Возможно, я ошибаюсь, но я использую его для преобразования классической строки (из файла) в ES6 шаблона ES6:

let name = 'Daman'
let classicString = 'Hello ${name}'
let templateString = eval(''' + classicString + ''')

Это дает мне то, что мне нужно:

"Hello Daman"

Ответ 10

один из лучших вариантов использования, использующий eval, - это javascript logger, в котором пользователь может запускать javascript во время выполнения. например javascript logger, позволяющий пользователю выполнить script в окне журнала.

Ответ 11

вы можете создать клиентский скелет и работать в качестве основного приложения - получать пакеты кода и затем выполнять их, тем самым делая клиента чрезвычайно гибким - имея весь код на сервере в связках. Однако это очень рискованно, и если такая вещь необходима, то вы, возможно, должны использовать Java с пакетами Java. Почему Eval все еще на языке обсуждается, слишком большой риск для безопасности использовать

Ответ 12

Использование eval полезно, но, как и все остальное, вы должны знать о рисках. Каждая часть кода JS представляет собой потенциальный риск. Ошибки в программном обеспечении проникают через логические ошибки и ошибки кодирования с непреднамеренными последствиями. Я всегда говорю, что компьютеры никогда не делают то, что вы от них хотите, они делают то, что вы им говорите. Это означает, что вы должны помнить, что программное обеспечение должно быть тщательно продумано. Программное обеспечение не изменилось. Люди все еще пишут на лету вместо тщательного анализа и правильного дизайна. Мы все виновны в одних и тех же грехах в разработке программного обеспечения. Используйте eval - eval - это не зло, это то, что вы делаете.

Ответ 13

Для динамического запуска кода на основе строк, представляющих код JavaScript. например:

let dynamicFunc = eval('(x)=>(x+2)') // or whatever plain text which is valid JS function
console.log(dynamicFunc(40));
// expected output: 42

Предупреждение безопасности! Вы должны всегда проверять эти строки, чтобы избежать выполнения вредоносных сценариев, особенно при использовании его на стороне сервера.

Ответ 14

Eval() может быть очень полезным, даже если он был отменен. Я использую его в autoit для включения кода в код.

Его можно применять при написании код-процессора для создания собственного скрипта.

ЗАЧЕМ? В моем случае использование этого на крупномасштабном tcp-сервере не требует от меня перекомпиляции исходного кода и удаления всех клиентов из-за перезапуска. Поэтому я использую eval для добавления новых сценариев на лету, в отличие от конфигурации, он не статичен и может использоваться для вычислений и т.д. Кроме того, комбинирование eval с командами вызова может установить значение посредством eval из функции.

Но кроме этого, это не будет очень безопасно для использования. Даже используя его таким образом, я рекомендую сделать его надежным.