2011-06-21 39 views
0

我有這個以下if語句:有趣的JavaScript怪癖

RG是 「100」,最大是 「85」

if (RG == "" | RG > max) { 
      //Doesn't execute 
     } 

由於RG是不是 「」 和RG比最大爲什麼ISN較大代碼執行?我相信操作員短路(因此只有一個管道),但改變它並沒有什麼區別。我的猜測是,它比較文字字符串 - 所以我如何強制JavaScript將它們視爲浮動?

只是要清楚我需要檢查OR的兩個部分,只有當它們中的任何一個爲真時才執行。

+0

爲什麼你需要的,如果第一個是已經真正的第二部分檢查? –

+0

我試過這個在Firebug控制檯中,它爲我工作,'var RG = 100,max = 85; if(RG ==「」|| RG> max){console.log('Hello World!'); '我很想看看你的代碼有什麼問題,希望它與JS變量作用域無關,我在這裏丟失了一些東西。 – Kumar

+0

@Kumar:'RG'和'max'是由於某種原因的字符串... –

回答

3

我認爲運營商是短路(因此只有一個管道|),但改變它沒有任何區別

我把它那原本是這樣的:

if (RG == "" || RG > max) { 
    //Doesn't execute 
} 

我們可以忽略第一部分,因爲它是錯誤的,所以你的問題是爲什麼不是RG > max是真的?答案是「100」在字符串整理順序中出現在「85」之前。字符串不是數字,你不用數字來比較它們。

如果你希望他們像你說的是浮筒,可以使通過parseFloat這些數字(或parseInt,因爲它們看起來像整數,但你說的花車,所以......):

if (RG == "" || parseFloat(RG) > parseFloat(max)) { 
    //Doesn't execute 
} 

我已經在內部完成了它,但是可能性很高,您希望儘早完成它,並將結果分配給變量,除非這是真正將數值用作數字的唯一位置。

+0

所以我需要保持||在那裏? –

+0

@ m.edmondson:是的。你不想做一個按位操作。你在這裏做邏輯運算。 –

+0

@ m.edmondson:更有意義。 –

1
if (RG === "" || parseFloat(RG) > parseFloat(max)) { 
     // should execute 
} 
+0

您可能想使用'==='而不是'=='來檢查空字符串,如[我的答案](http://stackoverflow.com/questions/6423048/interesting-javascript-quirks/ 6423150#6423150)。 –

+0

@Mathias Bynens:right –

0

我該如何強制javascript將它們視爲浮動對象?

像這樣:

var RG = "100", 
    max = "85"; 

if (RG === "" || Number(RG) > Number(max)) { 
    // Your code goes here. 
    // It will be executed if RG is the empty string OR if RG > max. 
} 

Number(foo)將迫使foo成數。您也可以使用+foo,但我認爲這更具可讀性。

如果字符串也可以包含文本,則應該使用parseFloat

請注意,您爲空字符串檢查時,需要嚴格的平等檢查(===),因爲如果RG0RG == ""將是真實的,'0'false等爲好。

0

好吧,解析字符串。

if (RG == "" | parseFloat(RG) > parseFloat(max)) {    
//Do Something } 
1

我喜歡

if((!RG) || RG*1>max*1) 
{ 
... 
}