我正在通过JavaScript中的prompt()编写一个简单输入的条件检查。我们的想法是重复提示,直到用户提供正整数。
特别是,如果我提交一个负整数,它会通过情况3再次正确地提示我。但是,如果我再次使用负整数回答第二个提示,则代码意外地离开了while循环。
在if语句中:
案例1:检查用户是否“取消”提示框(或返回空字符串),在这种情况下,我将变量'cancelGridCreation'设置为'true'以稍后取消封装过程(在包含的代码之外) ),然后通过将变量'waitingForQualifyingAnswer'设置为'false'来终止while循环。
案例2:检查响应是否是可接受的整数(数字,整数,正数),并设置条件变量'false'以终止while循环。
案例3:再次提示用户,并认为新输入的数据将被相同的3'如果'案例再次检查。
匹配案例1和2的用户输入似乎工作正常。但是,如上所述,输入负整数2次会终止while循环。查看我收到的控制台输出,输入-10然后输入-20。同样,console.log()输出似乎不会出现在与代码中的位置匹配的顺序中(可能是处理时滞问题?)。您将看到来自案例3的console.log()在“初始大小输入”console.log()之前输出,它在while循环开始之前编码。
类似的结果似乎发生在案例3后面跟着另一个案例3(无论输入是否为负整数,小数或字符串),以及案例3后跟案例1(当然,此处案例1将终止循环,但控制台日志语句似乎仍然无序发生)。
链接到JSBin的交互式代码:https://jsbin.com/koheku/1/edit?js,console
JavaScript代码:
let cancelGridCreation = false;
let waitingForQualifyingAnswer = true;
let answer = prompt('Please enter the number of rows/columns, as a positive integer:', '16');
let gridSize = parseFloat(answer, 10);
console.log('initial size entered: ' + gridSize);
while (waitingForQualifyingAnswer === true) {
console.log('top of while loop');
if (answer == null || answer == "") {
console.log('prompt - canceled');
cancelGridCreation = true;
waitingForQualifyingAnswer = false;
} else if (typeof gridSize === 'number' && gridSize % 1 === 0 && gridSize > 0) {
console.log('prompt - good answer: ' + gridSize);
waitingForQualifyingAnswer = false;
} else {
console.log('prompt - BAD answer: ' + gridSize);
answer = prompt('Incorrect format entered. Please enter the number of rows/columns, as a positive integer:', '16');
gridSize = parseFloat(answer, 10);
console.log('new size entered: ' + gridSize);
}
console.log('end of while loop');
}
console.log('done:');
console.log(gridSize);
控制台输出如下(在第一个提示输入-10,在第二个提示输入-20):
"prompt - BAD answer: -10"
"top of while loop"
"initial size entered: -10"
"new size entered: -20"
"end of while loop"
"done:"
-20
我很新,并意识到可能有更简洁的方法来实现这一目标。我对建议很感兴趣,但是,当我只提交案例3输入时,我也很想知道为什么while循环结束。
请注意:console.log()语句只是一种简单的调试方法。我意识到parseInt()会截断任何小数,但我选择允许整数作为可接受的大小。
感谢您提供任何建议:)