基于给出意外结果的提示输入的逻辑
logic based on prompt input giving unexpected results
你好,我是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.yearBorn
和me.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年崩溃。
相关文章:
- 如何在 JavaScript 和 HTML 中更改对输入框的提示响应
- JQM simpledialog:如何提示输入数字
- 输入密钥和firefox提示
- 通过提示中的循环触发iFrame中的输入按钮(JavaScript)
- 将“提示”对话框中的输入替换为星号时出现问题
- 如何自定义数据::confirm弹出窗口以提示输入,该输入将附加到请求参数中
- 基于给出意外结果的提示输入的逻辑
- 我可以使用javascript将提示输入的第一个字母大写吗
- 用于提示输入和输出的JavaScript按字母顺序排序
- Javascript:我可以根据提示输入在数组中找到数字的索引吗
- 从Javascript中的循环提示输入中分配多个变量
- 如何将提示输入保存到数组中
- 将提示输入与数组值匹配
- 返回提示输入
- 输入字段总是提示输入,而不是显示占位符文本
- JavaScript提示输入
- 密码&提示输入检查
- 提示输入数组和计数器
- 如何将用户提示(输入)存储到数组中并检索它's的最大值和最小值
- 如何编写javaScript函数,通过提示输入2个数字,并在警报中显示这些数字的总和