no-implied-eval
禁止使用类似 eval()
的方法
避免在 JavaScript 中使用 eval()
被认为是一种良好的实践。这样做会涉及安全和性能方面的影响,这就是为什么许多代码检查工具(包括 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()
)。
规则详情
此规则旨在通过使用 setTimeout()
、setInterval()
或 execScript()
来消除隐式的 eval()
。因此,当这两个函数以字符串作为第一个参数使用时,它会发出警告。
此规则的错误代码示例
在游乐场中打开
/*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 中引入。