eslint/no-eval 正确性
它做了什么
禁止引用 eval 函数。此规则旨在通过禁止使用 eval() 函数,防止潜在危险、不必要的以及性能较差的代码。
为什么这是不好的?
JavaScript 的 eval() 函数具有潜在危险性,且经常被误用。在不受信任的代码上使用 eval() 可能使程序面临多种注入攻击。在大多数场景下,eval() 的使用都可以被更安全、更优的替代方案所取代,例如以更安全的方式使用 JSON.parse() 或 Function 构造函数。
示例
以下为 错误 用法示例:
js
const obj = { x: "foo" },
key = "x",
value = eval("obj." + key);
(0, eval)("const a = 0");
const foo = eval;
foo("const a = 0");
this.eval("const a = 0");以下为 正确 用法示例:
js
const obj = { x: "foo" },
key = "x",
value = obj[key];
class A {
foo() {
this.eval("const a = 0");
}
eval() {}
static {
this.eval("const a = 0");
}
static eval() {}
}配置
此规则接受一个配置对象,包含以下属性:
allowIndirect
type: boolean
default: true
此 allowIndirect 选项允许间接调用 eval()。
间接调用 eval(例如 window['eval'])比直接调用更安全,因为它们无法动态改变作用域。此外,与直接调用相比,间接 eval() 调用通常对性能的影响也较小,因为不会触发 JavaScript 的作用域链。
如何使用
要通过配置文件或 CLI 启用 此规则,可以使用:
json
{
"rules": {
"no-eval": "error"
}
}bash
oxlint --deny no-eval