在一个条件下检查NaN,null和> = 0

我有一个变种;

它的值可以是NaN, null and any +ve/-ve number including 0.

我需要一个过滤掉a的所有值的条件,只有> = 0的值在if条件下产生一个真值。

实现这一目标的最佳方法是什么,我不希望使用||连接3个不同的条件

 typeof x == "number" && x >= 0 

其工作原理如下:

  • nulltypeof null == "object"所以表达式的第一部分返回false
  • NaN – 类型typeof NaN == "number"NaN不大于,小于或等于包括其自身在内的任何数字,因此表达式的第二部分返回false
  • number – 大于或等于零的任何其他number表达式返回true

几周前我遇到了同样的问题,我用以下方法解决了这个问题:

 if(~~Number(test1)>0) { //... } 

http://jsfiddle.net/pT7pp/2/

NaN不是>= 0 ,因此您需要做的唯一排除是null

 if (a !== null && a >= 0) { ... } 

这似乎运作良好:

 if (parseFloat(x) === Math.sqrt(x*x))... 

测试:

 isPositive = function(x) { return parseFloat(x) === Math.sqrt(x*x) } a = [null, +"xx", -100, 0, 100] a.forEach(function(x) { console.log(x, isPositive(x))}) 

过滤这些值的最佳解决方案是2条件,它就像;

  if(a!=undefined && a>=0){ console.log('My variable is filtered out.') } 

我不确定,但没有单一的条件使用它。

哦……但我真的找到了……它很简单。

parseInt(null)= NaN。

所以if(parseInt(a)>=0){}会做… Yayyee

既然您标记了jQuery,请查看$.isNumeric()

 if($.isNumeric(a) && a >= 0)