2011-06-21 4 views
0

を癖コードが実行されていませんか?私はオペレータが短絡していると信じていました(したがって、パイプは1つだけです)が、それを変更しても差はありませんでした。私の推測では、リテラル文字列を比較している - それで、どうやってjavascriptを浮動小数点として扱うのですか?興味深い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"の前に来るということです。文字列は数値ではなく、数値で比較しません。

あなたが言ったように彼らがフロートになりたい場合は、(彼らは整数のように見えるとして、あるいはparseIntていますが、山車を言ったので...)、あなたはそれらの数字parseFloatを経由して行うことができます:

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

Iをそれをインラインで実行しましたが、実際には値を数値として使用する唯一の場所でない限り、その確率を高くして結果を変数に代入したいと考えられます。

+0

だから私は||そこで? –

+0

@ m.edmondson:はい。あなたはビット単位の操作をしたくありません。あなたはここで論理的な操作をしています。 –

+0

@ m.edmondson:意味があります。 –

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

[my answer](http://stackoverflow.com/questions/6423048/interesting-javascript-quirks/)で説明されているように、空の文字列をチェックするには、 '=='の代わりに '==='を使用します。 6423150#6423150)。 –

+0

@マティアス・ビインズ:右 –

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を使用する必要があります。空の文字列をチェックするときにRG0ある場合RG == ""はtrueになりますので、あなたは、厳密な等価性チェック(===)が必要

注意、'0'falseなどにも。

0

よく、文字列を解析します。

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

あなたが最初のものはすでに真である場合には、第2の部分をチェックし必要な理由私は

if((!RG) || RG*1>max*1) 
{ 
... 
} 
関連する問題