Javascript 为什么这个while循环会导致无限循环?

Javascript 为什么这个while循环会导致无限循环?,javascript,html,while-loop,Javascript,Html,While Loop,由于某种原因,我很难让这个while循环正常工作。每当我尝试测试它时,它总是会使我的浏览器崩溃,有一次我能够在控制台中看到循环的结果,我所看到的只是NaN打印了几次。我的代码中有什么我忘记的吗 <div id="output"></div> <script> var starting = prompt("What is your starting balance?"); var target = prompt("What is your target ba

由于某种原因,我很难让这个while循环正常工作。每当我尝试测试它时,它总是会使我的浏览器崩溃,有一次我能够在控制台中看到循环的结果,我所看到的只是NaN打印了几次。我的代码中有什么我忘记的吗

<div id="output"></div>

<script>

var starting = prompt("What is your starting balance?");
var target = prompt("What is your target balance?");
var interest = prompt("What is your interest rate?");
var periods = 0;

var current = starting;
var greaterThan = false;

while (greaterThan === false) {
  if (current < target) {
    current = current + (current * interest);
    periods++;
  } else {
    greaterThan = true;
    alert("it took " + periods + " periods to make your starting balance greater than your target balance.");
    document.querySelector('#output').textContent = "to grow an initial investment of " + starting + " to " + target + " at a " + interest + " interest rate will require " + periods + " investment periods.";
  }
}

</script> 

var start=prompt(“您的起始余额是多少?”);
var target=prompt(“您的目标余额是多少?”);
var利息=提示(“您的利率是多少?”);
var周期=0;
无功电流=启动;
var greaterThan=假;
while(大于===false){
如果(当前<目标){
当前=当前+(当前*利息);
句号++;
}否则{
大于等于真;
警惕(“需要“+周期+”周期才能使你的起始平衡大于目标平衡。”);
document.querySelector(“#output”).textContent=“要以“+利息+”利率将“+起始+”的初始投资增长到“+目标+”,将需要“+期间+”投资期。”;
}
}

我看到的一个问题是,所有的输入值都是字符串,而不是数字,因此它们进行的是字符串比较,而不是数字比较

var starting = +prompt("What is your starting balance?") ||0;
var target = +prompt("What is your target balance?")||0;
var interest = +prompt("What is your interest rate?")||1;

prompt()
前面的
+
是运算符

您忘记了将prompt的结果从字符串转换为数字

var starting = parseFloat(prompt("What is your starting balance?"));

对用户从提示符输入的其他数字执行相同的操作。

首先,您需要将输入转换为整数值。来自提示符的输入是一个字符串。即使您输入1、10或任何数字。您可以使用parseInt()实现这一点。因为你要的是利率,我想任何用户都会输入类似于2的内容。5,或10作为百分位数。不是0.1,也不是0.05。即使他这样做了,parseInt()函数也无法正确执行,因为0.05不是整数值。您可以使用parseFloat来实现这一点。因此,我建议您看看下面代码的实现。另外,我省略了if-else语句,因为它们不是必需的,只会使代码更加复杂

<div id="output"></div>

<script type="text/javascript">

var starting = parseInt(prompt("What is your starting balance?"));
var target = parseInt(prompt("What is your target balance?"));
var interest = parseInt(prompt("What is your interest rate?"));
var periods = 0;
var intrate = interest/100;
var current = starting;

while (current< target) {

    current += (current*intrate);
    periods += 1;
  } 
    alert("it took " + periods + " periods to make your starting balance greater than your target balance.");
    document.querySelector('#output').textContent = "to grow an initial investment of " + starting + " to " + target + " at a " + interest + " interest rate will require " + periods + " investment periods.";
</script>

var start=parseInt(提示(“您的起始余额是多少?”);
var target=parseInt(提示(“您的目标余额是多少?”);
var利息=parseInt(提示(“您的利率是多少?”);
var周期=0;
var intrate=利息/100;
无功电流=启动;
while(当前<目标){
电流+=(电流*内部);
周期+=1;
} 
警惕(“需要“+周期+”周期才能使你的起始平衡大于目标平衡。”);
document.querySelector(“#output”).textContent=“要以“+利息+”利率将“+起始+”的初始投资增长到“+目标+”,将需要“+期间+”投资期。”;

您是否尝试将断点设置为greaterThan=true并验证代码是否达到此值?您必须将字符串转换为int。(
parseInt
)+null返回0。比parseFloat好得多,因为它不会返回NaN。@hani,除非这是您想要的行为。人们可能不想将null转换为零,因为null意味着他们点击了cancel。你应该如何区分键入0和单击取消之间的区别?@Arun P Johny在本例中,你正在执行OR,这意味着如果他们单击取消,他们仍然得到0(null | | 0)。在提示符前还有一个加号,如果点击cancel(+null),则再次将其设为0