Javascript 而循环不会中断

Javascript 而循环不会中断,javascript,for-loop,while-loop,Javascript,For Loop,While Loop,在做一个练习时,我不明白为什么我的while循环没有转义,它总是说即使只输入了数字,值也无效。有什么想法吗 //31。卡沃宁心率 var age、restingPulse、targetRate、numCheckAge、numCheckPulse、有效; 有效=错误; numCheckAge=/^\d+$/.test(年龄); numCheckPulse=/^\d+$/.test(restingPulse); while(有效===false){ age=parseFloat(提示(“输入您的年

在做一个练习时,我不明白为什么我的while循环没有转义,它总是说即使只输入了数字,值也无效。有什么想法吗

//31。卡沃宁心率
var age、restingPulse、targetRate、numCheckAge、numCheckPulse、有效;
有效=错误;
numCheckAge=/^\d+$/.test(年龄);
numCheckPulse=/^\d+$/.test(restingPulse);
while(有效===false){
age=parseFloat(提示(“输入您的年龄:”);
restingPulse=parseFloat(提示(“输入您的静息心率:”);
if(numCheckAge==true&&numCheckPulse==true){
有效=真;
}否则{
警报(“对不起,这不是有效的输入,请输入数字。”);
}
}
对于(var i=0.55;i<1;i+=0.05){
targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲;
文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”;
}
在测试正则表达式的地方,那些变量
age
restingPulse
未定义的。在这些变量接收到来自用户输入的值后,您必须将用于测试的代码移动到循环中:

while(!valid) {
  age = parseFloat(prompt("Enter your age:"));
  restingPulse = parseFloat(prompt("Enter your resting heart rate:"));

  numCheckAge = /^\d+$/.test(age);
  numCheckPulse = /^\d+$/.test(restingPulse);
  if(numCheckAge && numCheckPulse) {
    valid = true;
  } 
  else {
    alert("Sorry. That's not a valid input, please enter numbers.");
  }
} 

此外,您还可以删除
===true
位,直接使用变量的真值进行测试。

我已经简化并调整了代码;)

看看这个:


功能要求数字提示(文本){
var值;
while(true){
如果(/^\d+$/.test(值=提示(文本))){
返回值;
}
警报(“对不起,请输入有效(数字)值。”);
}
}
var age=parseInt(requireNumericPrompt(“输入您的年龄:”);
var restingPulse=parseInt(requireNumericPrompt(“输入您的静息心率:”);
文件。写入('Age:'+Age+'
'); 写入('Resting pulse:'+Resting pulse+'
'); 对于(var targetRate,i=0.55;i<1;i+=0.05){ targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲; 文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”; }
var age,restingPulse,targetRate,numCheckAge,numCheckPulse,valid;
有效=错误;
numCheckAge=函数(a){
返回/^\d+$/.test(a);
}
numCheckPulse=函数(a){
返回/^\d+$/.test(restingPulse);
} 
while(有效===false){
age=parseFloat(提示(“输入您的年龄:”);
restingPulse=parseFloat(提示(“输入您的静息心率:”);
if(numCheckAge(年龄)和numCheckPulse(静止脉冲)){
有效=真;
}否则{
警报(“对不起,这不是有效的输入,请输入数字。”);
}
}
对于(var i=0.55;i<1;i+=0.05){
targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲;
文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”;
}
您的思路是正确的,只是忘记了初始化变量

var age,restingPulse,targetRate,numCheckAge,numCheckPulse,valid;
年龄=0;
静止脉冲=0;
有效=错误;
numCheckAge=/^\d+$/.test(年龄);
numCheckPulse=/^\d+$/.test(restingPulse);
while(有效!==true){
age=parseFloat(提示(“输入您的年龄:”);
restingPulse=parseFloat(提示(“输入您的静息心率:”);
if(numCheckAge==true&&numCheckPulse==true){
有效=真;
}否则{
警报(“对不起,这不是有效的输入,请输入数字。”);
}
}
对于(var i=0.55;i<1;i+=0.05){
targetRate=((220-年龄)-静止脉冲)*i)+静止脉冲;
文件。书写(“强度:+Math.round((i*100))+”%|;比率:+Math.round(targetRate)+“
”;
}
您需要在循环内的正则表达式上执行
测试
s(在输入
age
restingPulse
之后)。使用调试器会立即显示
numCheckAge
numCheckPulse
仅设置一次,并且以后不会更新…而且,您可以使用
isNaN(age)
而不是regex来检查输入是否是一个数字(:注意,如果他们实际期望使用/\d+$/的浮点值不匹配,因为浮点值将转换为字符串,并且该模式将不匹配小数验证0值?为什么?原因是,由于您使用JavaScript模拟OOP,除非该变量具有静态存储空间,否则其初始值是不确定的。确定。但它将如何检查enterif语句之前的ed数据:
if(numCheckAge==true&&numCheckPulse==true){