为什么angular.isNumber()没有按预期工作?

时间:2013-06-27 19:40:32

标签: javascript angularjs

好像AngularJS的angular.isNumber无效。它不适用于数字字符串。难道我做错了什么?我应该使用isNaN()吗?

angular.isNumber('95.55') == false
angular.isNumber('95.55' * 1) == true
angular.isNumber('bla' * 1) == true
angular.isNumber(NaN) == true

我需要一些东西来看看一个字符串是否是一个数字(实际上是什么时候)并且angular.isNumber()不会让我这样做,除非我乘以1,但如果我这样做那么它将永远是真的。此外NaN不是数字(根据定义),因此应返回false。

3 个答案:

答案 0 :(得分:14)

JavaScript 中,typeof NaN === 'number'

如果您需要将 String 识别为 Number ,请将其转换为 Number ,转换回 String 并将其与输入进行比较,例如。

function stringIsNumber(s) {
    var x = +s; // made cast obvious for demonstration
    return x.toString() === s;
}

stringIsNumber('95.55'); // true
stringIsNumber('foo'); // false
// still have
stringIsNumber('NaN'); // true

答案 1 :(得分:1)

使用如下,

angular.isNumber(eval('99.55'))

对于其他表达式,我们也可以使用eval(input)

注意:eval()是一种javascript方法

答案 2 :(得分:0)

我正在研究同样的问题,我正试图解决这个边缘案例。所以我创建了一个稍微不同的方法。

<强> FIDDLE

function isStringNumber(str) {
  var parsed = parseFloat(str);
  var casted = +str;
  return parsed === casted  && !isNaN(parsed) && !isNaN(casted);
}