Spec-Zone.ru › ESLint

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(). Поэтому оно выдаёт предупреждение, если какая-либо из этих функций используется со строкой в качестве первого аргумента.

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint no-implied-eval: "error"*/
/*global window, setTimeout, setInterval, execScript*/

setTimeout("alert('Hi!');", 100);

setInterval("alert('Hi!');", 100);

execScript("alert('Hi!')");

window.setTimeout("count = 5", 10);

window.setInterval("foo = bar", 10);

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint no-implied-eval: "error"*/
/*global setTimeout, setInterval*/

setTimeout(function() {
    alert("Hi!");
}, 100);

setInterval(function() {
    alert("Hi!");
}, 100);

Параметры

У этого правила нет параметров.

Когда не следует использовать это правило

Если вы хотите разрешить setTimeout() и setInterval() со строковыми аргументами, это правило можно безопасно отключить.

Связанные правила

  • no-eval

Версия

Это правило появилось в ESLint v0.0.7.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-implied-eval

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API