web-dev-qa-db-ja.com

JSLintは「基数パラメータがありません」と言っています。私は何をすべきか?

私はこのJavaScriptコードでJSLintを実行しました、そしてそれは言いました:

行32の文字30に問題があります。基数パラメーターがありません。

これが問題のコードです。

imageIndex = parseInt(id.substring(id.length - 1))-1;

ここで何が問題なのですか

454
Mike Vierwind

ParseIntで基数を渡すことは常に良い習慣です -

parseInt(string, radix)

10進数の場合

parseInt(id.substring(id.length - 1), 10)

Radixパラメータが省略された場合、JavaScriptは次のように仮定します。

  • 文字列が "0x"で始まる場合、基数は16(16進数)です。
  • 文字列が "0"で始まる場合、基数は8(8進数)です。この機能は廃止予定です
  • 文字列が他の値で始まる場合、基数は10(10進数)です。

参照

820
Jayendra

私は正しく質問に答えていませんが、 なぜ基数 を指定すべきなのかを明確にすることは理にかなっていると思います。

MDNのドキュメントで私たちはそれを読むことができます:

基数が未定義または0(または存在しない)の場合、JavaScriptは次のことを想定します。

  • [...]
  • 入力文字列が "0"で始まる場合、基数は8(8進数)または10(10進数)です。正確にどの基数が選択されるかは実装依存です。 ECMAScript 5は10(10進数)が使用されることを指定しますが、すべてのブラウザがまだこれをサポートしているわけではありません。このため、parseIntを使用するときは常に基数を指定してください。
  • [...]

出典: MDN parseInt()

39
nmoliveira

この警告を回避するには、次のようにします。

parseInt("999", 10);

あなたはそれを置き換えることができます:

Number("999");


ParseIntとNumberは 動作が異なる であることに注意してください。ただし、場合によっては、一方を他方に置き換えることができます。

35
Zanon

このテストをスキップしたい場合は、この規則を無効にすることができます。

インサート:

radix: false

tslint.jsonファイルの "rules"プロパティの下。

あなたがこの例外を理解しないならば、そうすることはお勧めできません。

23
Spock

JSファイルの上に以下を追加すると、JSHintに基数警告を抑制するように指示します。

/*jshint -W065 */

また見なさい: http://jshint.com/docs/#options

21
aleemb

ParseInt行の真上にこの行を追加することもできます。

// eslint-disable-next-line

これは次の行のeslintチェックを無効にします。 1行か2行だけスキップする必要がある場合はこれを使用してください。

4
Rohit Nethi

+ fooを使って文字列を変換するだけで解決しました。

読みやすくするためにはあまり意味がありません(汚れた修正)。

console.log( +'1' )
// 1 (int)
4
user2369834

ParseInt()は2つの引数を取るので、基数の場所に空の文字列を入れるだけです。

parseInt(文字列、基数);

string解析する値文字列引数が文字列でない場合は、(ToString抽象操作を使用して)文字列に変換されます。文字列引数の先頭の空白は無視されます。

radix上記の文字列の基数(数式システムの基数)を表す2から36の整数。人間が一般的に使用する10進数で10を指定してください。読者の混乱を避け、予測可能な動作を保証するために、常にこのパラメーターを指定してください。基数が指定されていない場合、実装が異なると結果も異なります。通常、デフォルト値は10です。

imageIndex = parseInt(id.substring(id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;

2
Ahmed.Dz

substring関数を呼び出す代わりに、.slice()を使うことができます。

    imageIndex = parseInt(id.slice(-1)) - 1;

ここで、sliceの-1は、最後のインデックスからスライスを開始することを示します。

ありがとう。

0
Daniel

"radix": "off"のように見えるカスタムルールを.eslintrcに追加するだけで、このeslintの不要な警告がなくなります。これはエスリントリンター用です。

0
Goran7777