14

DOM から数値を抽出して計算する場合、どのルールに従う必要がありますか? javascriptは値が数値かどうかをどのように認識していますか? 常に parseInt を使用する必要がありますか?

次のコードを考えると:

HTML

<div id="myvalue">5</div>
<div id="withParseInt"></div>
<div id="withoutParseInt"></div>
<div id="withoutParseIntButIncrement"></div>

JS & jQuery:

var value = $('#myvalue').text();
$('#withParseInt').text(parseInt(value) + 1);
$('#withoutParseInt').text(value + 1);
$('#withoutParseIntButIncrement').text(value++);

次の出力が得られます。

5
6
51
5

フィドル: http://jsfiddle.net/ytxKU/3/

4

4 に答える 4

12

メソッドは.text()常に文字列を返します。演算子などの一部の演算子は、+算術演算と文字列演算の両方を実行するためにオーバーロードされています。文字列の場合、連結を実行するため、結果は "51" になります。

文字列があり、非強制演算子を使用する必要がある場合は、parseInt(または数値に変換する他の方法) を使用する必要があります。

ただし、*たとえば暗黙の演算子はこの強制を実行するためparseInt、その状況では呼び出しは必要ありません (たとえば、更新されたフィドルを参照してください)。

インクリメント++演算子そのオペランドを強制しますが、後置演算子を使用しているため、効果がないことに注意してください。前置演算子を使用すると、それが機能していることがわかります。

$('#withoutParseIntButIncrement').text(++value);

要約すると、次のようになります。

// Parses string to number and adds 1
$('#withParseInt').text(parseInt(value) + 1);

// Coerces number 1 to string "1" and concatenates
$('#withoutParseInt').text(value + 1);

// Implicity coerces string to number, but after it's been inserted into the DOM
$('#withoutParseIntButIncrement').text(value++);

// Implicity coerces string to number, before it's been inserted into the DOM
$('#withoutParseIntButIncrement').text(++value);

// Implicity coerces to number
$('#withoutParseIntButMultiply').text(value * 2);

補足: 常に 2 番目の引数 (基数) を に渡すことをお勧めしparseIntます。これにより、数値が正しい基数で解析されます。

parseInt(value, 10); // For base 10
于 2013-03-15T10:06:22.680 に答える
7

唯一無二のルール:

DOM から取得するすべての値は文字列です。

于 2013-03-15T10:06:17.953 に答える
1

はい、安全のために常に parseInt() または Number() を使用する必要があります。それ以外の場合、Javascript はそれをどうするかを決定します

  • 値自体は文字列です
  • 演算子を使用+すると、2 つの文字列が連結されます
  • 演算子を使用-すると、数値の差が計算されます
  • ...
于 2013-03-15T10:06:16.273 に答える
1

parseInt特に、使用する数値システムに 2 番目のパラメーターを指定できるため、常に安全のために使用することをお勧めします。

ところで、最後の例では、++value6 に等しくしたい場合はそうする必要があります。

于 2013-03-15T10:08:38.937 に答える