no-implied-eval

禁止使用类似 eval() 的方法

避免在 JavaScript 中使用 eval() 被认为是一种很好的做法。这样做涉及到安全和性能方面的问题,这就是为什么许多 linter(包括 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())。

规则详情

STWqddE5n95lzSA5xFm307LELkqUSA66zf7ErZyrbbvS9CFXSByIvJq6Gg5oE9MzhJojMaN14u4sViwlQ5iugRyz0jfm05weXzgU7eeC0c63KQt56MwAVv6LRSlCzHN603M60kpqZpn5PHK+2UyFHl5yXY22GRxjLhECm+DgxwSTOI772FaIVg/T9B9bhkjyIX4327Zz/mTIStcd1lTksqtBJPEm8A7bFKXJtY9zqovFOH63R3ASn2XMyxzrMmPDWYgVXWD4kGw0OCegeckczjUzF+4w2/pO8oDtwbyaRsW0HMfyVRaNA5M/yABrI65cXvxVxUYBmJMf1iZ/ZcMfdg==

KIjVZ8jbyN1kWo441FXYIh3AmcQhCDgs/8OlFVGexGn4OCCKsdfcgNWXdLQQbb4u

/*eslint no-implied-eval: "error"*/

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

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

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

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

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

AoqXtTV6Q8irP1mRQNh34rATVScSSkZAU175f14ev6145njeerHH1txMZ4OQcdup

/*eslint no-implied-eval: "error"*/

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

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

何时不使用

1mPjiUlKLciwKxuoEjsKHAKyQyUqBA8zFqSuIRe7mxcihSfmSLOX4Sd4IErAjs0Vv0xh9H+8LaWJSp4bt3//O7z1m47tc3UuthdbqI3kyhsD0o807mU6Er1RuVxNitGQGrRrT5VqG30Vh59T3xdEHmqgQMxB6SSRsM9ieYVW0VIzRj34nrf9HZb1wiltdJSl