Skip to content
← Back to rules

eslint/no-eval 正确性

This rule is turned on by default.

它做了什么

禁止引用 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

参考资料