繁体   English   中英

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

[英]Unnecessary use of Boolean literals in conditional expression

我有一个 function 检查是否在数组中找到一个值。 我想返回一个 true 或 false。 当前代码有效,但抛出 js-standerd/es-lint 错误“在条件表达式中不必要地使用 boolean 文字”我在这里搜索了大量这些错误消息,但似乎无法理解它。 对我来说,这表示“如果找到该值,则返回 true,否则返回 false”

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

我试过这个

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

哪个有效但不返回 Boolean 如果找到,它返回项目。

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

linter 抱怨这个:

return found ? true : false

它说,如果found是真的返回true否则返回false 这种结构被称为“三元”运算符,从 C 的早期开始就一直在使用,如果不是更早的话。 ? 运算符评估左边的条件,如果条件评估为真,则返回第一个参数,否则返回假。

您的代码的问题在于,返回条件本身等同于返回布尔文字truefalse 因此,检查和文字是不必要的,可以删除。 但是,因为这是 javascript,您可能希望在返回之前双重否定条件,以强制它成为布尔值。 所以,结果是这样的:

return !!found

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

当然,这还可以进一步:

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

这样,您甚至根本不需要在代码中引入found的符号。 此外,使用some()会更好,但我认为您的问题更多是关于三元运算符而不是如何搜索列表。

我的问题是一个不必要的'else if'。

这产生了一个错误:

// val: "A" | "B" | "C"
const val = "B";

if (val === "A") {
     // do something
} else if (val === "B" || val === "C") {
     // do something else
}

删除“其他”修复了错误:

// val: "A" | "B" | "C"
const val = "B";

if (val === "A") {
     // do something
}

if (val === "B" || val === "C") {
     // do something else
}

我想原因是可读性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM