2016-04-19 11 views
0

こんにちは私はJavaScriptを初めて使っています。私は自分の問題を把握することができません。 私はこのような私のコードを入力すると、それは動作しますが、birth year + age === 2016またはそれは=== 2016ない場合、私は私のコードを入力しようとすると、それはユーザーの入力と、それはdoesnのプロンプトを使用して、このように、正しく予期せぬ結果をもたらすプロンプト入力に基づくロジック

var newAge = function (yearsAlive) { 
    yearsAlive = this.yearBorn + this.age ; 
if (yearsAlive === 2016) { 
    document.write("That Sounds about right to me ! "); 
    } else { 
    document.write("Your age cant be right , please try again"); 
    } 
} ; 
var me = { 
    name: "Markese" , 
yearBorn: 1991, 
    age: 25, 
    years: newAge 
} ; 
me.years() 

両方のステートメントをログに記録しますしかし、もし仕事はありません。 === 2016であっても、elseログ:Your age cant be right, please try againを取得し続けます。私は間違って何をしていますか?

var userName = prompt("Whats your name?") ; 
var userBorn = prompt ("Hey " + userName + " What year where you born?") ; 
var userAge = prompt ("hmm so if you were born " + userBorn + " that would make 
you how old today?") ; 
var newAge = function (yearsAlive) { 
    yearsAlive = this.yearBorn + this.age ; 
    if (yearsAlive === 2016) { 
    document.write("That Sounds about right to me ! "); 
    } else { 
    document.write("Your age cant be right , please try again"); 
    } 
} ; 
var me = { 
    name: userName , 
    yearBorn: userBorn, 
    age: userAge, 
    years: newAge 
} ; 
me.years() ; 
+0

'yearsAlive'変数は別の値dを得ることはありませんその人の誕生日の前か後かにかかっていますか? (それは)私が去年が私の誕生年だったと言うので私が10ヶ月であると想像してください。私はまだ1ではないので、0と言う! 2015 + 0!= 2016 – enhzflep

+0

それは100%正しいです、私はDate()関数を使ってそれを正確にすることができます。あなたが遅れてそれをキャッチしてうれしい!忙しかった。 –

答えて

0

promptの機能はよく分かりませんが、ユーザーが入力した文字列が返されていると仮定します。作業コードでは、me.yearBornme.ageの両方に数値が含まれています。しかし、あなたの非作業コードでは、それらに文字列を割り当てています。したがって、後で2つの文字列を一緒に追加すると、算術演算が行われません。 2つの文字列を連結しています。したがって、結果は決して2016に等しくなりません。parseInt()を使用して文字列を数値に変換する必要があります。試してみてください...

var me = { 
    name: userName , 
    yearBorn: parseInt(userBorn), 
    age: parseInt(userAge), 
    years: newAge 
}; 
+0

プロンプトがhttps://developer.mozilla.org/en-US/docs/Web/API/Window/prompt – moreON

+0

@moreONであることは間違いないと確信しています。それは 'string'を返します。 – RJM

+0

私の問題を解決したおかげで、男はすでにこのサイトが大好き! ! ! –

0

===演算子は別の意味です。これを参照してくださいLink

あなたが試みることができるのは、あなたのIf句で===から==に変更することです。

+0

厳密な比較演算子を常に使用することは、実際には良い習慣です。そして、w3schoolsにはリンクしないでください。彼らは時代遅れの情報をたくさん持っています。 –

0

ここで私が思いついた最善の解決策です。外部関数を使用する代わりに、関数を年変数にハードコードすることができます。これには欠点がありますので、外部関数を使用するバージョンも含まれています。

EDIT:= 2016

document.addEventListener('DOMContentLoaded', init, false); 

    function init() { 
    //simply change this part to reflect your needs. 
    var answer = document.getElementById('answer'); 
    answer.innerHTML = me.years(); 
    }; 

    var me = { 
    name: "Markese", 
    yearBorn: 1991, 
    age: 25, 
    years: function(){ 
     yearsAlive = this.yearBorn + this.age; 
     if (yearsAlive <= 2016) { 
     return yearsAlive; 
     } else { 
     return 'Your age cant be right , please try again'; 
     } 
    } 
    }; 

OR

document.addEventListener('DOMContentLoaded', init, false); 

    function init() { 
    var answer = document.getElementById('answer'); 

    //pass in the person object to a function 
    answer.innerHTML = newAge(me); 
    }; 

    function newAge(person){ 
    //extract the properties of that object 
    yearsAlive = person.yearBorn + person.age; 

    //return the proper result (or document.write()) 
    if (yearsAlive <= 2016) { 
     return yearsAlive; 
    } else { 
     return 'Your age cant be right , please try again'; 
    } 
    } 

    var me = { 
    name: "Markese", 
    yearBorn: 1991, 
    age: 25 
    }; 

yearsAlive <に置き換えyearsAlive> = 2016年、あなたは現在の年を抽出するために実際の日付オブジェクトを使用して検討する必要がありますし、あなたのコードが2017年に壊れないようにします。

+0

ありがとう、あなたは本当に私のコードを別の観点から見るのを手伝ってくれました。心から感謝する ! –

+0

喜んで助けてください!これは面白い問題でした。あなたが気にしないなら、私の答えを受け入れることができますか?ありがとう。 :) –

関連する問題