基于给出意外结果的提示输入的逻辑

logic based on prompt input giving unexpected results

本文关键字:提示 输入 结果 意外      更新时间:2023-09-26

你好,我是JavaScript新手,我无法解决我的问题。当我像这样输入代码时,它是有效的,如果birth year + age === 2016或不是=== 2016,它会正确地记录两条语句

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()

但当我尝试输入我的代码时,就像这样,使用提示进行用户输入,它不起作用。我一直在获取else日志:Your age cant be right, please try again,即使它是=== 2016。我做错了什么?

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() ;

我不知道prompt函数是什么样子的,但我认为它返回的是用户键入的字符串。在您的工作代码中,me.yearBornme.age都包含数值。但在非工作代码中,您要为这些代码分配一个字符串。因此,当您稍后将这两个字符串相加时,它并不是在进行算术加法运算。它将两个字符串连接起来。因此,结果永远不会与2016年持平。您需要使用parseInt()将字符串转换为数字。试试这个。。。

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

===运算符的含义不同。请参阅此链接

您可以尝试将If子句中的===更改为==

以下是我提出的最佳解决方案。您可以将函数硬编码到years变量中,而不用使用外部函数。这当然有它的缺点,所以我还包含了一个使用外部函数的版本。

编辑:yearsAlive>=2016,替换为yearsAlive<=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';
      }
    }
  };

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
  };

您可能需要考虑使用实际日期对象来提取当前年份,然后使用它来代替2016年。这样你的代码就不会在2017年崩溃。