簡體   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