我试图检查min总是小于max,min和max值总是一个数字,min和max不为空。
我注意到它从未检查过,但直接发送错误信息。我做错了什么?
var min=30
var max=5000;
if(isNaN(min)=="false" || isNaN(max)=="false") && (min!=""|| max!="") && (max > min))
{
document.write(min+ max);
}else
{
document.write("give error msg");
}
答案 0 :(得分:4)
您应该使用JavaScript Number()
来检查某些内容是否为数字。无论如何NaN
评估为false,所以你只需要检查它是否满足你的所有要求,而不是一些。如果min
不是数字,如果max
不是数字,则失败,如果min
小于max
则失败,则失败。这看起来像这样:
var min = 30
var max = 5000;
// You only need to check if its a Number using the default Number function which will
// return NaN if its not and convert if it can be converted.
if(Number(min) && Number(max) && (min <= max)){
document.write(min + ", " + max);
} else {
document.write("Min or Max is not a number or Min is bigger than Max");
}
现在,正如一些人已经指出的那样,这将有一些边缘情况,所以有一些东西绕过它:
function getNumber(n){
// Take a number 'n' and return 0 if false if its not a number.
return Number(n) === 0 ? 0 : Number(n) || false;
// Broken down this means:
// Check if n is the number 0. Yes? Return 0. No? Check if n is a number. Yes? Return that. No? Return false;
}
if(getNumber(min) !== false && getNumber(max) !== false && (min <= max)){
document.write(min + ", " + max);
}
或者@IsmaelMigual在评论中说,通过除以1然后比较来简化:
function isNumber(n){
// Returns true or false
return n / 1 == n / 1;
}
if(isNumber(min) && isNumber(max) && (min <= max)){
document.write(min + ", " + max);
}
答案 1 :(得分:0)
if(isNaN(min)=="false"
将始终返回false,因为该函数将返回true
或false
,但永远不会返回"false"
(这是一个字符串)。
此外,你应该使用&#34;和&#34;在第一个括号中
试试这个:
if(! isNaN(min) && ! isNaN(max)) &&
(...)
编辑:
试试这个条件:
if((! isNaN(min) && ! isNaN(max)) && max> min && min > 0 ) {
(...)