在条件表达式中不必要地使用布尔文字

Unnecessary use of Boolean literals in conditional expression

我有一个函数可以检查是否在数组中找到了一个值。我要return一个真假。当前代码有效但抛出 js-standerd/es-lint 错误 "Unnecessary use of boolean literals in conditional expression" 我在这里搜索了大量这些错误消息,但似乎无法理解它。对我来说,这表示 'If the value is found return true otherwise false'

let found = value.find(val => {
  return val === item
})
return found ? true : false

我试过了

  return value.find(val => {
     return val === item
   }) || false

它有效但不 return 如果找到布尔值,它是 return 项。

我知道我可以通过多种方式完成这项工作,但我只是想弄清楚我的代码是否错误或不正确,或者 es-lint 是否错误地标记了它。

return value.some(val => { return val === item; });

linter 正在抱怨这个:

return found ? true : false

应该读作“如果 found 为真 return true 否则 return false”。这种结构被称为 'ternary' 运算符,并且从 C 的早期就开始使用,如果不是更早的话。 ? 运算符计算左侧的条件,如果条件计算结果为真,则 return 是第一个参数,否则 return 是第二个参数,参数之间用冒号分隔.

您的代码的问题在于 return 条件本身等同于 return 布尔文字 truefalse。因此,检查和文字是不必要的,可以删除。但是,因为这是 javascript 你可能想在 return 之前对条件进行双重否定,以强制它成为布尔值。因此,结果如下所示:

return !!found

这更容易阅读,并且将来实施错误或被误解的可能性更小。

当然,这可以更进一步:

return !!value.find(val => val === item)

这样,你根本不需要在代码中引入符号[=​​13=]。此外,some() 会更好,但我认为你的问题更多是关于三元运算符而不是如何搜索列表。