版本

radix

強制在使用 parseInt() 時保持 radix 參數的一致性

💡 hasSuggestions

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

當使用 parseInt() 函式時,通常會省略第二個參數 radix,並讓函式嘗試從第一個參數判斷它是哪種數字類型。預設情況下,parseInt() 將自動偵測十進制和十六進制(透過 0x 前綴)。在 ECMAScript 5 之前,parseInt() 也會自動偵測八進制字面量,這造成了一些問題,因為許多開發人員假設前導 0 會被忽略。

這種混淆導致了始終使用 radix 參數來調用 parseInt() 以消除意外後果的建議。所以不要這樣做

const num = parseInt("071");      // 57

這樣做

const num = parseInt("071", 10);  // 71

ECMAScript 5 更改了 parseInt() 的行為,使其不再自動偵測八進制字面量,而是將它們視為十進制字面量。然而,第一個參數的十六進制和十進制解釋之間的差異導致許多開發人員繼續使用 radix 參數,以確保字串以預期的方式解釋。

另一方面,如果程式碼僅針對符合 ES5 標準的環境,則傳遞 radix 10 可能顯得冗餘。在這種情況下,您可能希望不允許使用這樣的 radix。

規則詳細資訊

此規則旨在防止字串意外轉換為與預期不同的基數的數字,或防止僅針對現代環境時冗餘的 10 radix。

選項

此規則有兩個選項

  • "always" 強制提供 radix(預設)
  • "as-needed" 不允許提供 10 radix

always

預設 "always" 選項的不正確程式碼範例

在 Playground 中開啟
/*eslint radix: "error"*/

const num = parseInt("071");

const num1 = parseInt(someValue);

const num2 = parseInt("071", "abc");

const num3 = parseInt("071", 37);

const num4 = parseInt();

預設 "always" 選項的正確程式碼範例

在 Playground 中開啟
/*eslint radix: "error"*/

const num = parseInt("071", 10);

const num1 = parseInt("071", 8);

const num2 = parseFloat(someValue);

as-needed

"as-needed" 選項的不正確程式碼範例

在 Playground 中開啟
/*eslint radix: ["error", "as-needed"]*/

const num = parseInt("071", 10);

const num1 = parseInt("071", "abc");

const num2 = parseInt();

"as-needed" 選項的正確程式碼範例

在 Playground 中開啟
/*eslint radix: ["error", "as-needed"]*/

const num = parseInt("071");

const num1 = parseInt("071", 8);

const num2 = parseFloat(someValue);

何時不該使用

如果您不想強制執行 10 radix 值的存在或省略,則可以關閉此規則。

版本

此規則在 ESLint v0.0.7 中引入。

延伸閱讀

資源

變更語言