2015-02-05 86 views
-1

我想创建一个简单的计算器,但我有验证问题。有人可以解释为什么第一个if语句会通过,但是当我为第二个提示输入回答时,它会跳回第一个if语句,就好像它没有通过第一个语句一样?超级初学者JavaScript ....我在做什么错误?

这是到目前为止我的代码... http://jsfiddle.net/kiradale/03nLz9bh/

var userNumbers = prompt("Enter only two numbers.").split(" "); 
var a = userNumbers[0]; 
var b = userNumbers[1]; 

var userOperator = prompt("Enter a multiplication, division, addition, or subtraction operator."); 

if (userNumbers == '' || isNaN(userNumbers)){ 

    alert("Hey! Enter only two numbers and no blanks!"); 
} 

if (userOperator === "*" || userOperator === "/" || userOperator === "+" || userOperator === "-"){ 

    var myCalculator = function(a,b){ 

     alert("okay ready to go"); 
    } 

    myCalculator(); 
} 

else { 
     alert("Hey! Enter only the specified operators and no blanks!"); 
} 

任何帮助表示赞赏:)

+5

'userNumbers'是一个数组,不是一个字符串或数字。 – Nit 2015-02-05 19:28:42

+0

@Nit是正确的,在第一个if语句中,您需要直接检查&b变量而不是userNumbers。 – Superdrac 2015-02-05 19:30:23

+0

检查a和b是否是数字而不是userNumbers – 2015-02-05 19:30:51

回答

0

userNumbers应该是有两个元素的数组 - 但你检查,如果它不是一个数量。 isNaN(userNumbers)将返回true,所以你总是会得到此警告:

(userNumbers == '' || isNaN(userNumbers)) 

相反 - 你应该检查是它是一个数组,如果它的长度为2

1

您可以使用这样的事情

var userNumbers = prompt("Enter only two numbers.").split(" "); 
var a = parseInt(userNumbers[0]); 
var b = parseInt(userNumbers[1]); 
var userOperator = prompt("Enter a multiplication, division, addition, or subtraction operator."); 

if (isNaN(a) || isNaN(b)){ 

    alert("Hey! Enter only two numbers and no blanks!"); 
} 

else if (userOperator === "*" || userOperator === "/" || userOperator === "+" || userOperator === "-"){ 

    var myCalculator = function(a,b){ 

     alert("okay ready to go"); 
    } 
    myCalculator(); 
} 

else { 
     alert("Hey! Enter only the specified operators and no blanks!"); 
} 

您必须检查a和b是否为数字。由于userNumber是一个字符串数组,因此您必须将其解析为整数格式,然后检查它

0

因为数字输入的验证在提示输入数字和运算符后执行。在两个提示都完成后,检查userNumbers是否为空字符串,或者isNaN(usernumbers)返回true,它将用于我的输入“2 2”,因为这不是数字。