Javascript 为什么我的while循环要测试出生年份是否有4个字符,并且以1或2个无限开始?
这是我的密码。我还是一个初学者,我已经尝试了半个小时来解决这个问题,但都没有用。这可能是一个简单的解决办法,但我真的不明白我做错了什么。如果你回答我的问题,请非常清楚地解释原因,因为我通常理解赋值运算符,但很明显,这一个是我无法理解的。 谢谢大家!Javascript 为什么我的while循环要测试出生年份是否有4个字符,并且以1或2个无限开始?,javascript,Javascript,这是我的密码。我还是一个初学者,我已经尝试了半个小时来解决这个问题,但都没有用。这可能是一个简单的解决办法,但我真的不明白我做错了什么。如果你回答我的问题,请非常清楚地解释原因,因为我通常理解赋值运算符,但很明显,这一个是我无法理解的。 谢谢大家! // Calculating your age with your date of birth // yob is the year of birth var yob = parseInt(prompt('What ur date of birth'
// Calculating your age with your date of birth
// yob is the year of birth
var yob = parseInt(prompt('What ur date of birth', 1995));
function calcage (yob){
while ((yob[0] != 1 && yob[0] !=2) || (yob.length != 4)) {
// I don't understand why this is an infinite loop.
// while yob doesn't start with one
//or doesn't start with two or yob length is smaller than 4.
// Then ask the question again.
var yob = parseInt(prompt(' Please enter a valid date of birth. What your date of birth ', 1995));
}
var age = 2017 - yob;
return age;
}
var yourage = calcage(yob);
document.write("You are "+yourage+" years old");
当您像这样使用
yob[0]
时,我假设您正在尝试查找yob的第一个数字
除非将yob的值转换为字符串,否则这种方法实际上是行不通的。如果这样做,您可以找到yob的第一个数字,或者从技术上讲,因为您将其转换为字符串,所以它将是第一个字符
yob
是一个整数,而不是数组,也不是字符串。还可以考虑在<代码> PARSETIN()/<代码>上使用第二基数参数来指定基以避免奇怪的bug。这意味着yob[0]
是未定义的。除非先将数字转换为字符串,否则不能使用[]
运算符访问数字的位数。函数calage(yob){var yob=yob.toString();我使用了它,它工作了。谢谢你们!与其进行混乱的字符串比较,为什么不在while条件中将其作为整数进行比较?while(yob<1000 | | yob>=3000)
非常感谢,我不知道为什么我没有想到这个!如果你把它作为一个答案发布,我会选择你作为最佳答案