eqeqeq
Require === and !== (eqeqeq)
在--fix
命令行上的选项可以自动修复一些被这条规则反映的问题。
使用类型安全的相等运算符===
而!==
不是常规对==
等运算符被认为是好的做法!=
。
这样做的原因是,==
和!=
做强制类型转换后面的相当晦涩抽象平等比较算法。例如,所有考虑以下的陈述true
:
[] == false
如果其中一个发生在一个看似无辜的陈述中,如a == b
实际问题很难发现。
规则细节
该规则旨在消除类型不安全的等式操作符。
此规则的错误
代码示例:
/*eslint eqeqeq: "error"*/
if (x == 42) { }
if ("" == text) { }
if (obj.getStuff() != undefined) { }
在--fix
命令行上选择自动修复此规则报告的一些问题。如果其中一个操作数是一个typeof
表达式,或者两个操作数都是相同类型的文字,则问题只会得到解决。
选项
总是
该"always"
选项(默认)强制使用===
和!==
在任何情况下(除非您选择更具体的处理null
见下文)。
选项的错误
代码示例"always"
:
/*eslint eqeqeq: ["error", "always"]*/
a == b
foo == true
bananas != 1
value == undefined
typeof foo == 'undefined'
'hello' != 'world'
0 == 0
true == true
foo == null
选项的正确
代码示例"always"
:
/*eslint eqeqeq: ["error", "always"]*/
a === b
foo === true
bananas !== 1
value === undefined
typeof foo === 'undefined'
'hello' !== 'world'
0 === 0
true === true
foo === null
此规则可选地接受第二个参数,该参数应该是具有以下受支持属性的对象:
"null"
:自定义此规则如何处理null
文字。可能的值:
聪明
该"smart"
选项强制使用===
以及!==
这些情况除外:
- 比较两个文字值
选项的错误
代码示例"smart"
:
/*eslint eqeqeq: ["error", "smart"]*/
// comparing two variables requires ===
a == b
// only one side is a literal
foo == true
bananas != 1
// comparing to undefined requires ===
value == undefined
选项的正确
代码示例"smart"
:
/*eslint eqeqeq: ["error", "smart"]*/
typeof foo == 'undefined'
'hello' != 'world'
0 == 0
true == true
foo == null
允许为空
弃用:
不使用此选项,而是使用“always”并传递值为“ignore”的“null
”选项属性。这将告诉ESLint始终强制严格平等,除非与null
文字进行比较。
["error", "always", {"null": "ignore"}]
何时不使用它
如果您不想强制使用相等运算符的样式,那么禁用此规则是安全的。
版
这条规则是在ESLint 0.0.2中引入的。