2017-11-01 7 views
0

このプログラムでは、0または121以下の任意の数値の入力、または文字列はとして返されます。ただし、文字列を入力すると、FULL_PRICE文字列が返されます。文字列のfalseを返すブール値 - 真でなければならない

const LOW_AGE = 5, 
    HIGH_AGE = 69, 
    MID_AGE = 17, 
    MAX_AGE = 120, 
    FULL_PRICE = "You must pay full price.", 
    HALF_PRICE = "You must pay half price.", 
    FREE = "You may travel for free"; 

function main() { 
    var age, inputError, cost; 

    age = Number(prompt("Enter Your Age:")); 

    if (age < 0 || age > MAX_AGE || age == NaN) 
    inputError = true; 
    else 
    inputError = false; 

    if (age < LOW_AGE || age > HIGH_AGE) 
    cost = FREE; 
    else if (age < MID_AGE) 
    cost = HALF_PRICE; 
    else 
    cost = FULL_PRICE; 

    if (inputError) 
    alert("Input Error."); 
    else 
    alert(String(cost)); 
} 

あなたは私がage == NaNを使用してfalseとして文字列をトリガすることを試みている見ることができるように。

age == Stringも入力しようとしました。

確かに、文字列にはtrueと返されますか?

+0

_ "確かに文字列の場合はtrueに戻りますか?" 'age == String'ですか? 'age'は数値、' String'は関数です。どのように彼らは等しいことができますか?文字列はまったくありません。 'age == NaN'を使って文字列を' false'としてトリガするのはどういう意味ですか?あなたはNaNに等しいものは何もないことを知っていますか? – Xufox

+0

あなたは次のようなことをしなければならないと思います: '{var input = Number(prompt(" Enter String "));} while(!input.isInteger());'それで、文字列が正しく変換されるまでintに。あなたがそれをしないと、あなたはプロンプトの後に言うことができます: 'if(!input.isInteger()){alert(" Error。 ");戻る; } '。なぜ計算が終了するまで待つのですか? – Fallenreaper

+0

以下のいずれかの回答が問題を解決する場合は、それを受け入れる必要があります(該当する回答の横にあるチェックマークをクリックしてください)。それは2つのことをします。あなたの問題があなたの満足のために解決されたことを誰にでも知らせることができます。 [詳細はこちら](http://meta.stackexchange.com/a/5235)を参照してください。 – VTodorov

答えて

4

JavaScriptにはちょっとした問題があります。 NaN == NaNfalse,NaN === NaNfalseである。 NaNと何かを比較したい場合は、isNaN()関数を使用してください。

例:年齢がNaNの場合

if (age < 0 || age > MAX_AGE || isNaN(age)) 
    inputError = true; 
0

チェックするには、機能isNaN(age)を呼び出す必要があります。 NaN == NaNは実際には偽です。

関連する問題