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*/
;
;
;
;
;
Примеры правильного кода для этого правила:
/*eslint no-implied-eval: "error"*/
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