Вы можете использовать eval
, и да будет выполнено несколько операторов. НО, как правило, плохая идея использовать eval
. В большинстве случаев вы, вероятно, можете выполнить все, что хотите, без eval
.
eval
может быть довольно опасным, если используется с кодом пользователя, например, от формы или URL-адреса. Он откроет вас до Cross-Site Scripting (XSS) attacks. Просто избегая этого, это лучший способ действий, так как this answer упоминает, дезинфицируя входные данные перед тем, как пронести его через eval
, совсем нет прямой и очень подверженной ошибкам.
Пара других менее важных проблем с использованием eval
заключается в том, что он делает код сложным для отладки, и он медленный. Это делает невозможным оптимизацию и/или кеширование браузерами, как это делает другой код.
Update
Я удивлен, что я забыл упомянуть об этом, когда я первоначально это ответил, но явно с помощью eval
заявления не является единственным способом eval
может быть использован в JavaScript. Передача code instead of a function reference на setTimeout
или setInterval
будет неявно определять этот код.
// This evals:
setTimeout("doSomething()", 1000);
// This does not eval:
setTimeout(doSomething, 1000); // also shorter :)
Хотя не совсем такой же, как eval
, то Function
constructor также similar security concerns associated with it.
let xss = 'alert("XSS")';
// whatever is in the string passed to Function
// becomes the body of the function
let doSomething = new Function(xss);
document.querySelector('button').addEventListener('click', doSomething, false);
<button>Do Something</button>
Так же, как с eval
, следует соблюдать осторожность при использовании строки в качестве входных данных для setTimeout
, setInterval
или Function
конструктора, особенно если пользовательский ввод будет передаваться в них.
Также смотрите:
Используйте 'Eval()' ... [проверка здесь] (https://developer.mozilla.org/en-US/docs/We б/JavaScript/Справка/Global_Objects/Eval) ... –