unicorn/no-instanceof-builtins 可疑
它做了什么
禁止对 ECMAScript 内建构造函数使用 instanceof,因为:
- 在不同执行上下文(如
iframe、Web Worker、Node VM 等)中会失效; - 通常具有误导性(例如,子类的
instanceof Array会失败); - 总存在更清晰且更安全的替代方案(如
Array.isArray、typeof、Buffer.isBuffer等)。
为什么这是不好的?
instanceof 在不同执行上下文(如 iframe、Web Worker、Node vm)中会失效,并且可能对子类或特殊对象给出误导性的结果。
示例
此规则的错误代码示例:
javascript
if (arr instanceof Array) { … }
if (el instanceof HTMLElement) { … }此规则的正确代码示例:
javascript
if (Array.isArray(arr)) { … }
if (el?.nodeType === 1) { … }配置
该规则接受一个配置对象,包含以下属性:
exclude
type: string[]
default: []
排除检查的构造函数名称。
include
type: string[]
default: []
除了默认集合外,额外需要检查的构造函数名称。 使用此选项可扩展规则以包含更多构造函数。
strategy
type: "strict" | "loose"
default: "loose"
控制检查哪些内建构造函数。
"loose"(默认):仅检查Array、Function、Error(当useErrorIsError为true时)、以及基本类型包装器"strict":额外检查Error类型、集合类型、类型数组以及其他内建构造函数
useErrorIsError
type: boolean
default: false
当为 true 时,检查 instanceof Error 并建议使用 Error.isError() 替代。 需要 Error.isError() 函数 可用。
如何使用
通过配置文件或 CLI 启用此规则,可以使用:
json
{
"rules": {
"unicorn/no-instanceof-builtins": "error"
}
}bash
oxlint --deny unicorn/no-instanceof-builtins