为什么这个 while() 循环会变成无限循环?
Why is this while() loop coming up as an Infinite Loop?
只是想弄清楚为什么下面的代码是一个无限循环?
var x = prompt("enter a number");
while (isNaN(x)){
prompt("please enter a number");
}
我只想不断要求用户输入有效数字,直到她输入为止。
因为您没有在循环内更新 x
:
var x = prompt("enter a number");
while (isNaN(x)){
x = prompt("please enter a number"); // <====
}
请注意,这是 do-while
循环有用的地方之一:
var x;
do {
x = prompt("please enter a number");
}
while (isNaN(x));
另请注意,x
将是一个 字符串 。但是,isNaN
将使用它,因为它所做的第一件事是尝试将其参数转换为数字(如果它不是一个数字)。但请注意 x
仍然是一个字符串,因此(例如)+
可能不会按照您的预期进行。因此,您可以使用一元 +
、Number()
、parseInt
或 parseFloat
来转换它。 (有关这些选项的详细信息,请参阅 。)示例:
var x;
do {
x = +prompt("please enter a number");
// ^
}
while (isNaN(x));
在脚本的第一行,您要求用户输入,并将此输入分配给 x
(假设他们输入 'a',而不是数字)。然后,您检查 x
是否是一个数字(不是)。如果不是数字,则要求用户再次输入。
但是,该输入永远不会(重新)分配给 x
,并且 x
的值仍然是 'a'。 prompt
-command 决不会与变量 x
耦合。在你的循环中试试这个
x = prompt("please enter a number");
只是想弄清楚为什么下面的代码是一个无限循环?
var x = prompt("enter a number");
while (isNaN(x)){
prompt("please enter a number");
}
我只想不断要求用户输入有效数字,直到她输入为止。
因为您没有在循环内更新 x
:
var x = prompt("enter a number");
while (isNaN(x)){
x = prompt("please enter a number"); // <====
}
请注意,这是 do-while
循环有用的地方之一:
var x;
do {
x = prompt("please enter a number");
}
while (isNaN(x));
另请注意,x
将是一个 字符串 。但是,isNaN
将使用它,因为它所做的第一件事是尝试将其参数转换为数字(如果它不是一个数字)。但请注意 x
仍然是一个字符串,因此(例如)+
可能不会按照您的预期进行。因此,您可以使用一元 +
、Number()
、parseInt
或 parseFloat
来转换它。 (有关这些选项的详细信息,请参阅
var x;
do {
x = +prompt("please enter a number");
// ^
}
while (isNaN(x));
在脚本的第一行,您要求用户输入,并将此输入分配给 x
(假设他们输入 'a',而不是数字)。然后,您检查 x
是否是一个数字(不是)。如果不是数字,则要求用户再次输入。
但是,该输入永远不会(重新)分配给 x
,并且 x
的值仍然是 'a'。 prompt
-command 决不会与变量 x
耦合。在你的循环中试试这个
x = prompt("please enter a number");