ESLint报错‘Unnecessary use of Boolean literals in conditional expression’求解
解决ESLint提示的「Unnecessary use of Boolean literals in conditional expression」问题
嘿,我来帮你搞定这个ESLint的报错问题!首先咱们得搞明白:你的代码逻辑能跑,但ESLint是在揪你一个“多余操作”的小毛病——你没必要把已经能当布尔值用的结果,再手动转成true/false。
为啥会触发这个错误?
先看你的代码:
let found = value.find(val => { return val === item }) return found ? true : false
Array.find()本身的返回逻辑是:
- 找到匹配元素时,返回该元素本身(这是个「真值」,除非元素本身是
0、''、null这类「假值」,但这时候你的判断逻辑还会出问题——比如你找的是0,found会返回0,你的三元表达式会返回false,但实际上你要的是“找到了”的true) - 没找到时,返回
undefined(这是个「假值」)
你写的found ? true : false,本质上是把一个已经可以被JS当作布尔值判断的结果,又手动做了一次转换——这完全是多此一举,ESLint就是在提醒你这一点。
两种正确的解决方式:
方式1:用Boolean()做严格转换(如果你坚持用find())
如果就是想用find(),可以直接用Boolean()把结果转成严格的布尔值,既简洁又能避免假值元素的判断错误:
const found = value.find(val => val === item) return Boolean(found)
方式2:用更语义化的Array.some()(更推荐)
其实你的需求是检查数组里有没有指定值,find()的设计初衷是「找到并返回第一个匹配的元素」,而Array.some()才是专门用来做存在性检查的——它会直接返回布尔值,完全不需要额外转换:
return value.some(val => val === item)
这个方法遍历数组时,只要找到第一个匹配的元素就立刻返回true,遍历完都没找到就返回false,完美契合你的需求,代码也更短更易懂。
额外提醒:别直接返回found哦
为啥不能直接写return found?举个例子:如果数组里有0,你要找的item就是0,find()会返回0,这时候直接返回0的话,调用函数的地方拿到的是0而不是true,就不符合你“返回true/false”的预期了。所以要么用Boolean()包装,要么直接用some()。
内容的提问来源于stack exchange,提问作者Andrew MacNaughton
相关产品推荐
相关产品推荐

