ホームページ > 記事 > ウェブフロントエンド > JavaScriptでparseIntを使うときのヒント_基礎知識
フォームに入力された日付形式をクライアント側で検証したいので、parseInt を使用して年、月、日を判断するコードをインターネットで見つけました。
.... .
else if(parseInt(month)
12)
....
ただし、現在の正しい日付では、ここでは渡せません。後で調べたところ、parseInt には実際には 2 つのパラメータがあり、1 つ目は変換する値、2 つ目は指定された基数です。 2 番目のパラメータが指定されていない場合、01 から 07 までしか正しく変換できません (つまり、1 から 7 に変換します)。08 からは、「0 で始まる数字は 8 進数」の規則に従って変換されます。 !今はたまたま 9 月で、私がランダムに選んだ日付によってこの問題が明らかになりました。もしこれを今年の前半に行っていたら、バグを残したまま、顧客は後半まで待つことになるでしょう。日付を入力できなかったことを知らせるメッセージが表示されました。
したがって、関数内で parseInt が使用される場合は常に、10 進数を示す 2 番目のパラメーターが追加されます。たとえば、上記の文を次のように変更します:
....
else if(parseInt(month,10)
12)
... ..
以前に JavaScript で文字列を数値に変換する parseInt 関数に何度か遭遇したため、比較のために他の方法に切り替えました。
ページにアクセスしてカレンダーのものを取得し、それを比較のために数値に変換すると、
var num = を使用すると、常に月の変換で問題が発生します。 parseInt(01);
var num = parseInt(01);
var num = parseInt(08); parseInt(09);
var num = parseInt(10);
上記の変換を実行すると、
parseInt() に渡されたパラメータは 1 から 7 まで問題ありません。 、が、parseInt (08) を使用すると、変換された num=0 という問題が発生しました
プロジェクトの緊急性により、詳しく調査しませんでした
時間ができたので、 parseInt JavaScript メソッドを調べてみました。
JavaScript API の説明は次のとおりです。
parseInt メソッド
は文字列から変換された整数を返します。
parseInt(numString, [radix])
パラメータ
numString
必須。数値に変換される文字列。
基数
オプション。 numString が保持する数値の基数を表す 2 ~ 36 の値。指定しない場合、「0x」の接頭辞が付いている文字列は 16 進数として扱われ、「0」の接頭辞が付いている文字列は 8 進数として扱われます。他のすべての文字列は 10 進数として扱われます。
上記の API を読んだところ、転送したパラメータが 01 から 08 までの場合、パラメータが '0' から始まるため、8 進数に変換されていることがわかりました。また、8 進数は 0 から 7 までしか表現できないため、パラメータが 01 から 07 の場合、変換は正しく行われます。08 の場合は、キャリーされて 0 に変換されます。また、parseInt(10) は 10
したがって、最後のパラメータを省略しないことがルールです。
正しく変換するには、parseInt(08,10); を使用します。