次のJSがページに埋め込まれています。
_var round = Math.round;
var id = $(this).attr("id");
var len = id.length;
var indexPos = len -1; // index of the number so that we can split this up and used it as a title
var pasType = id.substring(0, indexPos); // adult, child or infant
var ind = round(id.substring(indexPos)); // converts the string index to an integer
var number = (id.substring(indexPos) + 1); // creates the number that will go in the title
window.alert(number);
_
id
はadult0のようなものになります。この文字列を取得して、アダルトと0に分割する必要があります-この部分は正常に機能します。
0をインクリメントしようとすると問題が発生します。ご覧のとおり、Math.roundを使用して整数に変換し、1を追加します。この後0が1になると予想しています。ただし、_01
_ではなく_1
_を取得するため、整数に変換しているようには見えません。 adult1でこれをテストすると、私が受け取るアラートは_11
_です。
参照用に this の質問を使用しており、JS(_unexpected identifier '+='
_)を壊すvar number += id.substring(indexPos);
も試しました。
誰かが私が間違っていることを知っていますか?これを行うより良い方法はありますか?
parseInt()
関数はstring
を解析し、integer
、10を返します。基数または基数 [DOC]
var number = parseInt(id.substring(indexPos) , 10 ) + 1;
これは、JavaScriptの+
in演算子と関係があります-数値と文字列が「加算」されると、数値は文字列に変換されます。
0 + 1; //1
'0' + 1; // '01'
これを解決するには、+
単項演算子を使用するか、parseInt()
を使用します。
+'0' + 1; // 1
parseInt('0', 10) + 1; // 1
単項+
演算子はそれを数値に変換します(ただし、小数点である場合は小数点以下を保持します)。parseInt()
は自明です(数値に変換し、小数点以下は無視します)。
parseInt()
が先行する0が配置されたときに正しいベースを使用するには、2番目の引数が必要です。
parseInt('010'); // 8 in older browsers, 10 in newer browsers
parseInt('010', 10); // always 10 no matter what
文字列の小数を数値に変換する必要がある場合はparseFloat()
もあります。+
もそれを実行できますが、動作が少し異なります。
JSは、0が実際には文字列であると考え、intに変換するには、次のようにparseInt()関数を使用します。
var numberAsInt = parseInt(number, 10);
// Second arg is radix, 10 is decimal.
数値をintに変換できない場合、NaNが返されますので、実稼働で使用されるコードでも、少なくとも入力が100%確実でない場合はNaNを確認することをお勧めします。
parseInt
がこれを行う公式関数ですが、このコードで同じことを実現できます。
number*1
利点は、いくつかの文字を保存することです。これにより、コードで多くの会話が必要になる場合に帯域幅を節約できます。
Number Class
で変換:_
例えば:
var n = Number("103");
console.log(n+1)
出力: 104
注:-Number
はクラスです。文字列を渡すと、Number class
のコンストラクタが文字列を変換します。
ParseInt()を使用します。
var number = (parseInt(id.substring(indexPos)) + 1);` // creates the number that will go in the title
If.substring(indexof)が数値であることが確実な場合、次のようにできます。
var number = Number(id.substring(indexPos)) + 1;
それ以外の場合、Number関数が正しく評価されるかどうかを確認することをお勧めします。