2009-08-12 125 views
0

爲什麼JavaScript中的數字值的「大於」比較不起作用?即使迷你號碼小於最大號碼,下面的示例也會保持返回正確。JavaScript不比較大於最大數值的最小值

mini和maxi是表單輸入值。這個例子使用jQuery來獲取值,但很容易被剝離。

var mini = $('form#filterPrice input.min').val(); //eg. 500 
var maxi = $('form#filterPrice input.max').val(); //eg. 1500 

if(mini.valueOf() > maxi.valueOf()) { //also used: mini > maxi 
    alert('test'); //alerts "test" even when mini is less than maxi 
$('form#filterPrice input.min').val(maxi); //should switch values if mini > maxi 
$('form#filterPrice input.max').val(mini); 
} 

更換 「迷你> MAXI」 與 「Math.max(迷你,馬克西)==迷你」 工作正常。因此,下面做工作:

var mini = $('form#filterPrice input.min').val(); //eg. 500 
var maxi = $('form#filterPrice input.max').val(); //eg. 1500 

if(Math.max(mini, maxi) == mini) { 
    alert('test'); 
$('form#filterPrice input.min').val(maxi); 
$('form#filterPrice input.max').val(mini); 
} 
+1

Javascript可能會將mini和maxi視爲字符串,只是將它們進行詞彙比較。在這種情況下'500'大於'1500'。 嘗試在比較之前將mini和maxi轉換爲整數。 – Karl 2009-08-12 14:58:21

回答

4

使用該線路從字符串

if(parseInt(mini.valueOf(),10) < parseInt(maxi.valueOf(),10)) { //also used: mini > maxi 

得到詮釋sinve你從數值像繩子DOM比較。拳頭你應該解析成Int,然後才能比較。 另外,最好把10作爲第二參數,以確保數字將被解析爲十進制。

+0

我想知道是否需要mini.valueOf()。相反,使用parseInt(mini,10)更快? – Andres 2009-08-13 15:33:14

+0

我想你是對的 – 2009-08-13 16:20:53

+0

記得使用mini.replace(「,」,「」);刪除逗號或者沒有任何值轉換會起作用。 – 2013-03-28 20:47:04

0

在第一個例子中你比較字符串和"1500" < "500"。在第二個示例中,Math.max將值轉換爲數字。

+0

你可以明確地轉換爲整數使用:parseInt() – Karl 2009-08-12 14:59:35