9

我有一个 var a;

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

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

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

4

7 回答 7

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

这工作如下:

  • null--typeof null == "object"所以表达式的第一部分返回 false
  • NaN--typeof NaN == "number"NaN不大于、小于或等于包括其自身在内的任何数字,因此表达式的第二部分返回 false
  • number-- 任何number大于或等于 0 的表达式返回 true
于 2013-05-10T07:48:56.020 回答
2

哦...但我实际上找到了答案 .. 它是如此简单。

parseInt(null) = NaN。

所以if(parseInt(a)>=0){}会做......耶耶

于 2013-05-10T09:12:48.420 回答
1

这似乎运作良好:

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))})
于 2013-05-10T07:47:08.530 回答
1

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

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

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

于 2013-05-10T08:35:20.973 回答
1

NaN不是>= 0,所以你需要做的唯一排除是null

if (a !== null && a >= 0) {
    ...
}
于 2013-05-10T07:48:02.047 回答
1

我过滤掉这些值的最佳解决方案是使用 2 个条件,就像;

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

我不确定,但没有单一的条件用法可以做到这一点。

于 2013-05-10T07:48:15.513 回答
0

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

if($.isNumeric(a) && a >= 0)
于 2013-05-10T08:00:09.043 回答