版本

radix

使用 parseInt() 時,強制使用一致的 radix 引數

💡 有建議

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

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

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

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

這樣做

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

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

另一方面,如果程式碼僅以符合 ES5 的環境為目標,則傳遞 radix 10 可能會是多餘的。在這種情況下,您可能希望禁止使用這樣的 radix。

規則詳情

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

選項

此規則有兩個選項

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

always

預設 "always" 選項的錯誤程式碼範例

在遊樂場中開啟
/*eslint radix: "error"*/

var num = parseInt("071");

var num = parseInt(someValue);

var num = parseInt("071", "abc");

var num = parseInt("071", 37);

var num = parseInt();

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

在遊樂場中開啟
/*eslint radix: "error"*/

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

var num = parseInt("071", 8);

var num = parseFloat(someValue);

as-needed

"as-needed" 選項的錯誤程式碼範例

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

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

var num = parseInt("071", "abc");

var num = parseInt();

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

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

var num = parseInt("071");

var num = parseInt("071", 8);

var num = parseFloat(someValue);

何時不應使用它

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

版本

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

延伸閱讀

資源

變更語言