版本

logical-assignment-operators

要求或禁止邏輯賦值運算符簡寫

🔧 可修正

此規則報告的某些問題可以透過 --fix 命令列 選項自動修正

💡 有建議

此規則報告的某些問題可以透過編輯器的建議手動修正

❄️ 凍結

此規則目前凍結,不接受功能請求。

ES2021 引入了邏輯運算符 ||&&?? 的賦值運算符簡寫。 之前,這僅允許用於數學運算,例如 +* (請參閱規則 operator-assignment)。 如果賦值目標和邏輯表達式的左側表達式相同,則可以使用簡寫。 例如,a = a || b 可以簡寫為 a ||= b

規則細節

此規則要求或禁止邏輯賦值運算符簡寫。

選項

此規則具有字串和物件選項。 字串選項

  • "always" (預設)
  • "never"

物件選項 (僅在字串選項設定為 "always" 時可用)

  • "enforceForIfStatements": false (預設) 檢查等效的 if 語句
  • "enforceForIfStatements": true 檢查等效的 if 語句

always

此選項檢查可以使用邏輯賦值運算符縮短的表達式。 例如,a = a || b 可以縮短為 a ||= b。 具有結合性的表達式 (例如 a = a || b || c) 會回報為可以縮短為 a ||= b || c,除非使用括號明確定義評估順序,例如 a = (a || b) || c

使用預設 "always" 選項時,此規則的錯誤程式碼範例

在 Playground 中開啟
/*eslint logical-assignment-operators: ["error", "always"]*/

a = a || b
a = a && b
a = a ?? b
a || (a = b)
a && (a = b)
a ?? (a = b)
a = a || b || c
a = a && b && c
a = a ?? b ?? c

使用預設 "always" 選項時,此規則的正確程式碼範例

在 Playground 中開啟
/*eslint logical-assignment-operators: ["error", "always"]*/

a = b
a += b
a ||= b
a = b || c
a || (b = c)

if (a) a = b

a = (a || b) || c

never

使用 "never" 選項時,此規則的錯誤程式碼範例

在 Playground 中開啟
/*eslint logical-assignment-operators: ["error", "never"]*/

a ||= b
a &&= b
a ??= b

使用 "never" 選項時,此規則的正確程式碼範例

在 Playground 中開啟
/*eslint logical-assignment-operators: ["error", "never"]*/

a = a || b
a = a && b
a = a ?? b

enforceForIfStatements

此選項檢查可以使用邏輯賦值運算符表示的 if 語句的其他模式。

使用 ["always", { enforceForIfStatements: true }] 選項時,此規則的錯誤程式碼範例

在 Playground 中開啟
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/

if (a) a = b // <=> a &&= b
if (!a) a = b // <=> a ||= b

if (a == null) a = b // <=> a ??= b
if (a === null || a === undefined) a = b // <=> a ??= b

使用 ["always", { enforceForIfStatements: true }] 選項時,此規則的正確程式碼範例

在 Playground 中開啟
/*eslint logical-assignment-operators: ["error", "always", { enforceForIfStatements: true }]*/

if (a) b = c
if (a === 0) a = b

何時不該使用

使用邏輯運算符賦值簡寫是一種風格選擇。 關閉此規則將允許開發人員根據具體情況選擇哪種風格更具可讀性。

版本

此規則在 ESLint v8.24.0 中引入。

資源

變更語言