[英]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 的早期开始就一直在使用,如果不是更早的话。 ?
运算符评估左边的条件,如果条件评估为真,则返回第一个参数,否则返回假。
您的代码的问题在于,返回条件本身等同于返回布尔文字true
或false
。 因此,检查和文字是不必要的,可以删除。 但是,因为这是 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.