我已创建此功能
function num(){
var x = prompt("please enter your first number");
var y = prompt("please enter your second number");
if (isNaN(x)){
num();}
else if (isNaN(y)){
num();}
else if (x>y){console.log(x + " is greater than " + y);}
else if (y>x){console.log(y + " is greater than " + x);}
else {console.log("the two numbers are equal");}
}
该函数只会记录“两个数字相等”,因为它不能正常运行,当我取消isNaN函数正常运行时假设输入的值是数字
答案 0 :(得分:0)
这样的事情应该是你需要的。希望能帮助到你。
var valid1 = false;
var valid2 = false;
var x = prompt("please enter your first number");
while (!valid1) {
if (isNaN(parseInt(x)))
{ x = prompt(x + " is not a number. Try Again.") }
else { valid1 = true; } }
var y = prompt("please enter your second number");
while (!valid2) {
if (isNaN(parseInt(y)))
{ y = prompt(y + " is not a number. Try Again.") }
else{
valid2 = true;
if (x>y){
alert(x + " is greater than " + y); }
else if (y>x){alert(y + " is greater than " + x); }
else {alert("the two numbers are equal"); } } }
我添加了一个有效性循环来检查每个提示,因为我认为这是最终用户的良好做法。
我还修复了OP遇到问题的isNaN逻辑,并将parseInt添加到其中。
答案 1 :(得分:0)
试试这个。
//function to check if input is not number
function checkIfNaN(ipNo)
{
if(ipNo && ipNo.trim()!='') //handle empty inputs
return isNaN(Number(ipNo)); // Number will handle decimals as well. if parseInt is used 2.1 2.9 will be treated as equal
else
return true;
}
function TestNumber()
{
var num1 , num2;
while(checkIfNaN(num1)) //request user till number is entered
{
num1 = prompt("please enter your first number");
}
while(checkIfNaN(num2))
{
num2 = prompt("please enter your second number");
}
//Compare logic
if(num1>num2) alert("1Big");
else if(num1<num2) alert("2BIG");
else alert("eq");
}
TestNumber();
答案 2 :(得分:0)
检测是否有任何类型的JS对象或文字表示数字有点棘手。这是因为大多数转换方法将伪值视为0
,尤其是空字符串转换为零。
parseFloat
和parseInt
是execptional,他们将从任何虚假值返回NaN
。但是,它们将传递带有尾随非数字字符的字符串。因此,我们必须检测两者,假值和字符串。
唯一可靠的方法是CMS'es wiki-answer @KevinB中的方法已在评论中链接,即
if (!isNaN(parseFloat(n)) && isFinite(n)) {/* Passed, we've a number */}
然后是您的代码中的另一个问题,即输入无效值时的递归调用。如果您希望返回x
和y
的总和,num
将返回错误的值,如果在有效值之前输入了一些无效值。这个问题不会在您的特定代码中出现,但另一方面,它也不允许在正确的阶段将变量转换为数字,因此您无论如何都要更改代码
要解决递归问题,您需要单独检查每个prompt
:
var x, y;
while (!(!isNaN(parseFloat(x)) && isFinite(x))) {
x = prompt(...);
}
while (!(!isNaN(parseFloat(y)) && isFinite(y))) {
y = prompt(...);
}
现在x
和y
代表有效数字,因此我们可以转换它们:
x = +x;
y = +y;
完成所有这些并seen it working之后,我们会看到,prompt
实际上是一种向用户提供信息的糟糕方式。一种更好的方式是输入和&#34;获取关系&#34;按钮。
答案 3 :(得分:-3)
isNaN 函数在您尝试查看值是否为NaN时会产生很大的语义感。
window.prompt返回一个字符串,因此需要将其解析为整数。
var val = prompt("enter a number");
val = parseInt(val);
if (val === isNaN) {
//do something if not a number
}
else {
//do something else
}
您还可以使用正则表达式来测试输入字符串:
var val = prompt("enter a number");
var re = /^[0-9]+$/;
var found = val.match(re);
if (found) {//parenthesis not needed for typeof
console.log('Is a num', found);//do something if it is a number
}
else {
console.log('Is not a num', found);//do something else
}