我发现自己需要创建一个函数来验证JS提示符作为整数的输入。事实证明,按cancel
返回null.
我最初尝试(从Python程序移植)是:
function getInteger() {
let number = null
while ( number == null ) {
let value = prompt( "Guess number: " )
if ( isNaN( value ) ) {
alert( "Invalid input." )
} else {
number = parseInt( value )
}
}
return number;
}
但是,如果我取消了提示,则返回NaN
,这对于返回值没有意义(似乎isNaN(null)
返回了false
)。 (按没有意义,我的意思是“该程序的其余部分无法有意义地使用它,因为它不能描述所发生的事情”)。
所以经过一番思考,我想到了:
function getInteger(){
while(true){
let input = prompt("Input number: ");
if (input && isNaN( input ) ) {
// user pressed OK, but input invalid
alert("Invalid input.");
} else if (input) {
// user typed something valid and hit OK
return parseInt(input);
} else {
// User pressed cancel
alert("I'm out of here.")
return;
}
}
}
getInteger()
我很好奇我是否涵盖了所有可能的输入?另外,我的代码是否“编写得很好”-有更好的方法吗?使用while(true)
被认为是一个坏主意吗?
我知道一般而言,提示可能不是一个好主意,但这不是重点。
任何帮助表示赞赏。
答案 0 :(得分:1)
无法对此prompt
函数行为进行解答,但是您的最后一个代码等效于:
let input;
while (input = prompt("Input number: ")) {
if (isNaN(input)) {
alert("Invalid input.");
} else {
return parseInt(input);
}
}
仍然在prompt
行为之外,如果您期望input
字符串中有一个整数(即 only 数字),则我倾向于使用正则表达式进行测试类似于/^\d+$/
,而不是isNaN
(如果我输入"1.25"
,结果将不是NaN
,而是return 1
,但不会)似乎就是您要实现的目标。
编辑,该代码与完全不相同,所以让我们做到:
let input;
while (input = prompt("Input number: ")) {
if (isNaN(input)) {
alert("Invalid input.");
} else {
return parseInt(input);
}
}
alert("I'm out of here.");
return;
答案 1 :(得分:1)
我在上面运行了您的代码,我尝试不输入任何内容,然后按OK(确定)及其显示警报,就像我取消提示一样。我认为您还应该检查用户输入的内容还是不输入的内容。您的代码可能看起来像这样:
function getInteger(){
while(true){
let input = prompt("Input number: ");
if (input == null) {
// user hit cancel
alert("I'm out of here.")
return true;
} else{
if (input.length<=0 || isNaN( input ) ) {
// user pressed OK, but input invalid or does not input anything
alert("Invalid input.");
} else {
// user typed something valid and hit OK
return parseInt(input);
}
}
}
}
getInteger()