基于提示输入的逻辑给出意想不到的结果

时间:2016-04-19 01:20:33

标签: javascript

您好我是JavaScript的新手,我无法弄清楚我的问题。 当我像这样输入我的代码时,如果$(document).ready(function(){ $("button").click(function(){ var x = $("form").serializeArray(); $.each(x, function(i, field){ if($(this).hasClass("images")){ $("#results").append("if is sentence is true "+field.name + ":" + field.value + " </br>"); } else{ $("#results").append("if sentence is false "+field.name + ":" + field.value + " </br>"); } }); }); 或者它不是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

3 个答案:

答案 0 :(得分:0)

===运算符意味着别的东西。请参阅此Link

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

答案 1 :(得分:0)

我不知道您的prompt函数是什么样的,但我会假设它返回了用户输入的字符串。在您的工作代码中,me.yearBornme.age两者都包含数值。但是在你的非工作代码中,你要为那些代码分配一个字符串。因此,当您稍后将两个字符串添加到一起时,它不会执行算术添加操作。它连接两个字符串。所以结果永远不会等于2016年。您需要使用parseInt()将字符串转换为数字。试试这个......

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

答案 2 :(得分:0)

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

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

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