2013-03-15 3 views
14

DOMから数値を抽出して数値を抽出する際、どのようなルールを講じなければなりませんか?どのように値が数字かどうかをjavascriptが知っていますか?私はいつもparseIntを使うべきですか?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 

フィドル:を

答えて

12

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

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

しかし、暗黙のような*オペレータはこの強制を実行するため、その状況ではparseIntコールは必要ありません(たとえばupdated fiddleを参照)。

++オペレータがそのオペランドを強制しますが、後置演算子を使用して効果がないことに注意してください。要約する、だから、

$('#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); 

サイドノートを:常に第二引数(基数)を渡すために良い方法と考えられていますプレフィックス演算子を使用し、あなたはそれが働いて見ることができますにこれは、番号が正しいベースに解析されることを保証:

parseInt(value, 10); // For base 10 
+0

それは妥当な音です。時には、DOMから抽出された数値を計算するときに重大な問題を抱えていたので、数字を扱うときに常にparseIntを使用することになりました。あなたの答えはそれを確認します。そうすれば私は安全な側にいる。 – iappwebdev

+1

http://stackoverflow.com/questions/11786758/why-parseint08-is-giving-0-whereas-parseint07-is-giving-7?rq=1この質問は、なぜあなたが常にいくつかの整数を解析する際の奇妙なブラウザの癖。 –

1

はい、安全な側には常にparseInt()またはNumber()を使用する必要があります。それ以外の場合はJavascriptがそれ

  • をどうするかを決定する値自体はオペレータ+を使用して文字列
  • あるオペレータ-を使って2つの文字列
  • を連結します数値の違い
  • を計算します...
7

唯一のルール:

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

+4

6に等しくなるようにしたい場合には、++valueをする必要があります...そして、あなたが戻ってDOMに挿入するすべての値が文字列になります。 –

1

それはあなたが使用する数値システムのための二番目のパラメータを供給することができ、特にとして、念のためにparseIntを使用することは常に良いことです。ところで

、あなたの最後の例ではあなたはそれが