[英]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.