2013-08-20 78 views
0

我使用了以下内容:如何检查一个变量是否为空并且是一个数字?

$scope.option.selectedSubject != null && !isNaN($scope.option.selectedSubject) 

谁能告诉我,如果有另一种方式来检查,如果一个变量是一个有效的定义的数字?有什么办法可以用一个检查来做到这一点,或者我如何创建一个函数来做这个检查然后调用它?

+1

为什么?检查有什么问题?至于这个功能,谷歌会在这个实际的瞬间帮助你。 –

+0

一个字符串,一个对象,一个函数都不是'NaN' – cgTag

+3

@MathewFoscarini,'isNaN'将检查这个值的数字表示是否为'NaN'。这意味着'isNaN('500')'是'false',而'isNaN('foo')'是'true'。 – zzzzBov

回答

1

这可能是需要了解的:一个变量只能null在脚本中它被指定的地方时,它决不会null默认。

var foo; // undefined 
foo = null; 
// null could be returned by a function too, which is the most common use of null 

由于zzzzBov在他的评论中指出,“isNaN将检查值的数字表示是NaN。这意味着isNaN('500')false,而isNaN('foo')true。”

至于回答你的问题,检查此表:

!isNaN(undefined); // false 
!isNaN(null); // true 
!isNaN(); // false 
!isNaN(''); // true <= Watch out for this one ! 
!isNaN('test'); // false 
!isNaN('10'); // true 
!isNaN(10); // true 

如果你想确保它是一个数字,你应该使用typeof,那么如果这是一个字符串,检查它是否具有长度。将这一切全部包装在一个函数中将会产生如下所示的内容:

function isNumber (num) { 
    // Return false if num is null or an empty string 
    if (num === null || (typeof num === "string" && num.length === 0)) { 
     return false; 
    } 

    return !isNaN(num); 
} 

isNumber(undefined); // false 
isNumber(null); // false 
isNumber(); // false 
isNumber(''); // false 
isNumber('test'); // false 
isNumber('10'); // true 
isNumber(10); // true 
+0

我可以问为什么检查num.length <1。那只是为了检查它是否在0和9之间? – Alan2

+0

@Alan只是因为它比'=== 0'短,并且没有负长度的字符串。 – Broxzier

+0

我很抱歉,但你能解释=== 0.你的代码将返回true为零的数字,这是我需要它做什么? – Alan2

3

也许这个功能可以帮助你:

function isANumber(x) { 
return ((+x)===x); 
} 
+0

这看起来很有趣。如果x为空或未定义,这仍然可以工作吗? – Alan2

+0

+ undefined是NaN so + undefined!== undefined。 + null === 0 so + null!== null – GameAlchemist

+0

@Alan'null'和'undefined'返回'false'。只是未定义的'var'会给出错误,但是再次,它是一个参考错误(var未定义),而不是脚本错误。 – RaphaelDDL

1

如果您只关心数字表示,这样做会有效。

!isNaN($scope.option.selectedSubject + "") 

通知的+ ""

+0

如果$ scope.option.selectedSubject没有被定义或者为null,那么这也可以工作吗? – Alan2

+0

你是什么意思“数字表达”? – Alan2

+0

@Alan:是的,你可以试试。 “数字表示”在这里我的意思是它不检查数据类型。例如:“500”是一个字符串,但仍然通过此检查 –

相关问题