我想问用户一个号码,而他的答案不是一个数字,问题会继续循环(作为警告框)。
我试着用while循环和isNaN
做到这一点,但我做错了。
这是我的Js:
var correct = false;
do {
var question = prompt("guess the number?");
if (question !== isNaN) {
document.write("your number is " + question);
correct = true;
break;
}
} while(! correct);
答案 0 :(得分:2)
一些错误
isNaN()
是一个功能:isNaN(NaN)
返回true
而isNaN(1)
或isNaN("1")
返回false
prompt()
始终返回一个字符串(从不NaN
)您可以使用unary +
operator将结果从prompt()转换为数字,然后检查它是否为NaN
;
var question = prompt("guess the number?");
if (!isNaN(+question)) {
...
也就是说,isNaN()
如果您只是想查看一个字符串是否只包含数字,那么""
是不合适的,因为空格(" "
或"\n\t"
或{{1 }}将全部转换为0
并给你误报。
simple regex会做正确的事情;
var question = prompt("guess the number?");
var containsOnlyDigits = /^[0-9]+$/; // one or more of digits 0 to 9
if (containsOnlyDigits.test(question)) {
...
答案 1 :(得分:2)
我将为您提供以下示例的一些提示:
<html>
<head>
<title></title>
<script>
var answer = "";
do {
answer = prompt("guess the number?");
} while(!isNumber(answer));
document.write("your number is " + answer);
function isNumber(value) {
var numberPattern = /^[0-9]+$/; // one or more of digits 0 to 9
return numberPattern.test(value);
}
</script>
</head>
<body>
</body>
此处示例:https://plnkr.co/edit/ziysG36if9OTZahHfSbO
没有必要创建一个名为correct的附加变量来检查条件是真还是假,因为你的条件是clear,isNan(回答),所以while应该使用那个条件&#34;而(isNan(回答))&#34;
当你编写代码时,你应该写得尽可能干净,如果要保存提示的结果,更明确的是命名变量&#34;回答&#34;因为你正在保存答案而不是问题,这是一个方法调用。
答案 2 :(得分:1)
isNan
是一个函数 - 你需要通过在它后面添加括号来调用,然后将你的参数放在这些括号中。
isNaN
函数返回true
如果参数不是一个数字,false
如果是 。由于您要检查question
是否一个数字,我们可以使用!
前缀反转布尔输出,这将导致if
语句&#39 ;如果question
是数字,则触发正文。
var correct = false;
do {
var question = prompt("guess the number?");
if (!isNaN(question)) {
document.write("your number is " + question);
correct = true;
break;
}
} while (!correct);
答案 3 :(得分:1)
isNaN
是一个具有一些特殊规则的函数。您应首先尝试将输入解析为数字,然后对该结果使用isNaN
。如果从字符串到数字的转换失败,Number
将返回NaN。
var input1 = "1234";
var input2 = "abcd";
alert(isNaN(Number(input1)));
alert(isNaN(Number(input2)));
答案 4 :(得分:1)
如上所述 - isNan
是一个获取参数作为输入的函数。
您不必在isNan
中的测试之前将提示转换为数字,正如您在文档中看到的那样,它也可以接受字符串。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/isNaN#Examples
该功能将在幕后进行内部转换:
您可以将isNaN视为:
isNaN = function(value) { Number.isNaN(Number(value)); }
以下是适用于您的代码段:
var correct = false;
do {
var answer = prompt("guess the number?");
// The isNaN function gets an number argument
// You also need to check if there is value.
// If the user click no ESC you will get null
if (answer && !isNaN(answer)) {
// You cant write to the document once its loaded.
// it will clear any previous content in the page
document.write("your number is " + answer);
correct = true;
break;
}
} while (!correct);
答案 5 :(得分:0)
这是一个类似的解决方案:
for (let numTrue = false; !numTrue;) {
var question = prompt("Guess the Number!", "Number");
numTrue = !isNaN(question);
}
document.write("Your number is " + question);