0

对于 n00b 问题,我深表歉意,我尝试过查看与无限循环相关的问题,但它们要复杂得多:

var replay = 1;
while (replay = 1) {
replay = prompt("Yes(1) or No(0) ?");
}

这怎么会是无限循环?

我认为这个 while 循环只会在 replay 变量的值为 1 时继续迭代。

但是,即使用户输入为 0 或其他任何内容,它也不会停止。

提前感谢您的任何意见!

4

5 回答 5

4

你正在做一个分配而不是比较。

改变:

while (replay = 1) { // Will always have a value of 1

到:

while (replay == 1) { // Will have a value of true or false
于 2013-08-09T23:19:40.503 回答
3

在 while 部分使用==而不是。=

于 2013-08-09T23:19:38.730 回答
1

您需要在 while 循环中使用 == (equality) 而不是 = (assignment)

while(replay == 1) {
  //code
 }

JavaScript 正在做它应该做的事情。您正在重新分配 1 的值以在每次循环迭代时重播。您真的想在继续之前检查重放是否等于一。

于 2013-08-09T23:20:07.520 回答
1

您指定不签到 (replay = 1)

您需要双等号==,或者更好的三等号===,这也将检查操作数类型的相等性。

此外,您的代码可以更改为此(预览:http: //jsfiddle.net/nabil_kadimi/RfdA5/):

var replay;
while ((replay = window.prompt("Yes(1) or No(0) ?")) === '1') {
  /* player wants to replay */;
}

甚至更好(预览:http: //jsfiddle.net/nabil_kadimi/pdV4M/):

var replay;
while (replay = window.confirm("Replay?")) {
  /* player wants to replay */;
}
于 2013-08-09T23:54:42.847 回答
0

您想在 while 循环中使用===比较运算符而不是赋值运算符。=

此外,由于prompt返回 a string,您应该与 a 进行比较string

var replay = "1";
while (replay === "1") {
  replay = prompt("Yes(1) or No(0) ?");
}
于 2013-08-09T23:23:34.893 回答