var a = $('.box').width();
var b = $(document).height();
int
では、124px としましょうstring
。
これまで試行錯誤してこれを行ってきましたが、理由を理解したいと思っていますがif (b < 20)
、parseInt
を計算する必要がありますvar c = a + b
。何故ですか?
var a = $('.box').width();
var b = $(document).height();
int
では、124px としましょうstring
。
これまで試行錯誤してこれを行ってきましたが、理由を理解したいと思っていますがif (b < 20)
、parseInt
を計算する必要がありますvar c = a + b
。何故ですか?
注:この質問の目的のために、 and はandのような文字列であるa
と想定しています。は実際に返されるため (たとえば、要素の幅が 123 ピクセルの場合)、この場合は関係ありません。b
"10"
"20"
$('.box').width()
123
parseInt
なぜなら、
a + b
を使用しない場合parseInt
、JavaScript は文字列を連結する必要があると想定します (連結のため+
にオーバーロードされているため)。ただし、使用するときは
b < 20
JS は、「20 未満の文字列」を使用できないことを認識しています。これは意味がないため、自動的に数値にキャストします。
私たちはしません。
.width()
文字列ではなく数値をheight()
返すため、 を使用して変換する必要はありませんparseInt(...,10)
。「私たち」が誰を指しているのかはわかりませんが、jQuery を正しく使用している人は含まれていません。
この Web サイトで試してみてください。コンソールを開いて と入力var d = jQuery("div"); console.log(typeof d.height(), typeof d.width(), d.height() + d.width());
すると、[number]、[number]、および通常の数値加算の結果が表示されます。
< 演算子を使用すると、数値が大きくなったり小さくなったりするだけで意味がありますが、「+」の場合、javascript では文字列を連結するためにも使用できるため、「30」+「20」="3020" のようになります。そして 30+20=50
注:@Mike Poxman Kamermanは正しいです。ほとんどの場合、幅と高さのjquery関数は浮動小数点数を返すため、parseIntなしで機能しますが、javascriptが非常に厳密であり、古いIEのようなブラウザでは機能しなかったため、これは正しい方法です.
文字列と数値を比較する場合、比較を可能にするには、一方を他方の型に変換する必要があります。文字列は暗黙的に数値に変換されます。
2 つの文字列で演算子を使用している場合+
、操作を可能にするために必要な変換はありません。文字列を連結するだけですが、連結ではなく加算に演算子を使用する場合は、最初に文字列を数値に明示的に変換する必要があります。