JavaScriptのparseIntで基数(radix)を省略するとJSLintエラーになるのはなぜ?
parseInt関数の基本
JavaScriptに組み込まれているparseInt関数は、文字列を整数に変換するための関数です。この関数は次のようなシグネチャ(引数の形式)を持っています。
parseInt(string, radix);
それぞれのパラメーターの意味は以下のとおりです。
string(第1引数)
解析対象となる値です。文字列以外が渡された場合は、ToStringメソッドによって自動的に文字列へ変換されます。また、先頭の空白文字は無視されます。
radix(第2引数)
基数を表す2〜36までの整数です。基数とは数学における記数法の基準となる値のことで、たとえば10なら十進数、16なら十六進数を意味します。
基数を省略した場合の挙動
radixパラメーターを省略すると、JavaScriptは文字列の先頭に応じて次のように基数を推測します。
- 文字列が「0x」で始まる場合 → 基数は16(十六進数)として扱われます。
- 文字列が「0」で始まる場合 → 基数は8(八進数)として扱われます。
※この仕様は非推奨(deprecated)となっています。 - それ以外で始まる場合 → 基数は10(十進数)として扱われます。
JSLintやJSHintがエラーを出す理由
基数の省略は「文字列の見た目によって挙動が変わる」という予測しづらい動作を招きます。たとえば古い環境では「010」という文字列が八進数として解釈され、意図しない結果になるバグの原因になりかねません。
このような暗黙的で危険な挙動(マジック)を避けるため、JSLintやJSHintといった静的解析ツールでは、parseIntの呼び出し時に基数パラメーターが指定されていないとエラーまたは警告が表示されます。
対策:基数は必ず明示的に指定する
この問題は、第2引数の基数を常に明示的に指定することで回避できます。通常は十進数として扱いたいケースが多いため、「10」を指定しておくのが安全です。
const num = parseInt("08", 10); // 常に10進数として解析される基数を明示すれば環境による挙動の違いを心配する必要がなくなり、コードの可読性も向上します。
-
JavaScriptのErrorクラスは拡張できる?カスタムエラーを作成する最適な方法
JavaScriptでは、組み込みのErrorクラスを継承することで、独自のカスタムエラーを作成できます。最も推奨される方法は、ES2015(ES6)以降のclass構文とextendsキーワードを使って、標準のErrorクラスを拡張した新しいカスタムエラークラスを定義することです。カスタムエラーを利用すれば、エラーの種類を名前で判別したり、エラーコードなどの独自のプロパティを持たせたりできるため、アプリケーションの規模が大きくなっても、柔軟で分かりやすいエラーハンドリングを実現できます。カスタムエラーの実装例以下は、JavaScriptでErrorクラスを拡張するサンプルコードです。<
-
JavaScriptで文字列を圧縮する方法|ランレングス圧縮の実装
本記事では、連続して繰り返される文字を含む可能性のある文字列を受け取り、それを圧縮して返すJavaScript関数の実装方法を解説します。 文字列圧縮のルール この関数は、連続する同じ文字を「1文字+連続回数」の形式に変換することで、文字列を圧縮します。 k4j 圧縮しても短くならない場合の扱い ただし、圧縮後の文字列の長さが元の文字列以上になってしまう場合は、圧縮を行わずに元の文字列をそのまま返す必要があります。 たとえば「aab」は「a2b1」と圧縮できますが、長さが3文字から4文字に増えてしまいます。このようなケースでは、関数は元の「aab」を返すように設計します。 サンプルコード 実