Javascript函数,如果是,则为NaN

时间:2014-04-06 11:40:21

标签: javascript function if-statement

我需要帮助弄清楚我做错了什么,我试图制作一个函数,你应该在两个不同的盒子中输入两个数字并循环直到你输入一个有效的数字! (对不起我的代码和我的英文)

var x = parseInt(prompt("Please enter a number!"));
var y = parseInt(prompt("Please enter a number!"));

function add(x, y) {

    var z = x + y;
    var i = false;

    do {
        if (isNaN(x)) {
            alert("Invalid entry. Please enter a number!")
        } else if (isNaN(y)) {
            alert("Invalid entry. Please enter a number!")
        } else {

            alert(x + " + " + y + " = ");
            i = true;
        }
        while (i == false);
    }
}

add(x, y);

5 个答案:

答案 0 :(得分:1)

此代码存在以下几个问题:

  1. 你的时间错了。
  2. 参数x和y没有意义,因为用户需要输入它们。
  3. 询问数字的提示是在循环之外。
  4. 这是固定代码:

    function add() {
    
        do {
            var x = parseInt(prompt("Please enter a number!"));
            var y = parseInt(prompt("Please enter a number!"));
            var z = x + y;
            var i = false;
    
            if (isNaN(x)) {
                alert("Invalid entry. Please enter a number!")
            } else if (isNaN(y)) {
                alert("Invalid entry. Please enter a number!")
            } else {
    
                alert(x + " + " + y + " = " + z);
                i = true;
            }
        }
        while (i == false);
    }
    
    add();
    

答案 1 :(得分:1)

isNaN()是javascript函数,如果给定的值是Not-a-Number,则返回true。

var a = isNaN('127') ;       // return  false
var a = isNaN('1273 ') ;     // return  false
var b = isNaN(-1.23) ;       // return  false
var c = isNaN(5-2);          // return  false
var d = isNaN(0) ;           // return  false
var e = isNaN("Hell  o") ;   // return  true
var f = isNaN("2005/12/12"); // return  true

答案 2 :(得分:0)

试试这个:

$(document).ready(function(){
var x = parseInt(prompt("Please enter First number!"));
var y = parseInt(prompt("Please enter Second number!"));

function add(x, y) {

    var z = x + y;
    var i = false;

    do {
        if (isNaN(x)) {
            alert("Invalid entry for first number. Please enter a number!");
            x = parseInt(prompt("Please enter first number again!"));
        } else if (isNaN(y)) {
            alert("Invalid entry for second one. Please enter a number!");
            y = parseInt(prompt("Please enter Second number again!"));                
        } else {
               z=x+y;
            alert(x + " + " + y + " = "+ z);
            i = true;
        }
    }while (i == false);

}

add(x, y);
});

这是完整的演示版本是小提琴结帐。

Fiddle

答案 3 :(得分:0)

有几个问题:

  1. 它在句法上无效,你最终获得了一个独立的while (i == false);(这很好,但如果i永远不会结束{{1} })和你代码下的悬空false。您需要将}行移至while的结束}下方。

  2. 如果doxy,则您的NaN函数会循环,直到它们发生变化...但该循环中的代码不会更改它们。< / p>

  3. 我不知道你想要add做什么(因为只是添加数字并不需要一个功能),但如果目标是继续提示用户,你必须移动提示进入循环:

    add

答案 4 :(得分:0)

您也可以在不使用do while循环的情况下递归执行此操作,方法是询问xy值,直到两者都正确为止。另请注意,我使用基数值10作为parseInt(string, radix);因为文档将radix描述为:{/ p>

  

表示上述字符串的基数的整数。   始终指定此参数以消除读者的困惑和   保证可预测的行为。产生不同的实现   未指定基数时的结果不同。

parseInt

的文档中查看更多内容

代码示例:

function askXY(x, y) {

  var x_ = x,
      y_ = y;

  if(typeof x_ === "undefined") {
     x_ = parseInt(prompt("Please enter a number for x!"), 10);  
  }

  if(typeof y_ === "undefined") {
     y_ = parseInt(prompt("Please enter a number for y!"), 10);  
  }

  if(isNaN(x_) || isNaN(y_)) {
     alert("Invalid entry. Please enter a number!");

     // The magic is here, we keep the x or y if either one of those are correct
     // and if not, we give undefined so that value will be asked again from the user
     return askXY(
         !isNaN(x_) ? x_ : undefined, 
         !isNaN(y_) ? y_ : undefined
     );
  }

  // success!
  alert(x_ + " + " + y_ + " = " + (x_ + y_));

}

askXY();

查看我的JsFiddle example