no-implied-eval
Запрет на использование методов, подобных eval()
Считается хорошей практикой избегать использования eval() в JavaScript. Это связано с проблемами безопасности и производительности, поэтому многие линтеры (включая ESLint) рекомендуют запрещать eval(). Однако существуют и другие способы передать строку и интерпретировать её как код JavaScript, которые вызывают аналогичные опасения.
Первый способ — использовать setTimeout(), setInterval() или execScript() (только в Internet Explorer); все они могут принимать строку с кодом JavaScript в качестве первого аргумента. Например:
setTimeout("alert('Hi!');", 100);
Это считается неявным eval(), поскольку передаётся строка с кодом JavaScript для интерпретации. То же самое можно сделать с помощью setInterval() и execScript(). Оба метода интерпретируют код JavaScript в глобальной области видимости. Для setTimeout() и setInterval() первым аргументом также может быть функция; такой вариант считается более безопасным и работает эффективнее:
setTimeout(function() {
alert("Hi!");
}, 100);
Рекомендуется всегда использовать функцию в качестве первого аргумента setTimeout() и setInterval() (и избегать execScript()).
Подробности правила
Это правило призвано исключить неявный eval() при использовании setTimeout(), setInterval() или execScript(). Поэтому оно выдаёт предупреждение, если какая-либо из этих функций используется со строкой в качестве первого аргумента.
Примеры неправильного кода для этого правила:
/*eslint no-implied-eval: "error"*/
/*global window, setTimeout, setInterval, execScript*/
;
;
;
;
;
Примеры правильного кода для этого правила:
/*eslint no-implied-eval: "error"*/
/*global setTimeout, setInterval*/
setTimeout(function() {
alert("Hi!");
}, 100);
setInterval(function() {
alert("Hi!");
}, 100);
Параметры
У этого правила нет параметров.
Когда не следует использовать это правило
Если вы хотите разрешить setTimeout() и setInterval() со строковыми аргументами, это правило можно безопасно отключить.
Связанные правила
Версия
Это правило появилось в ESLint v0.0.7.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-implied-eval