JavaScript - 输入不是数字时提示

时间:2016-04-11 15:17:54

标签: javascript loops

我想问用户一个号码,而他的答案不是一个数字,问题会继续循环(作为警告框)。

我试着用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);

6 个答案:

答案 0 :(得分:2)

一些错误

  • isNaN() 是一个功能:isNaN(NaN)返回trueisNaN(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);