关于javascript:为什么angular.isNumber()无法正常工作?

Why is angular.isNumber() not working as expected?

似乎AngularJS的angular.isNumber无法正常工作。它不适用于数字字符串。难道我做错了什么?我应该只使用isNaN()吗?

1
2
3
4
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。


在JavaScript中,typeof NaN === 'number'

如果需要将字符串识别为数字,请将其转换为Number,然后转换回String并将其与输入进行比较。例如,

1
2
3
4
5
6
7
8
9
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
angular.isNumber(eval('99.55'))

对于其他表达式,我们也可以使用eval(input)
注意:eval()是一种javascript方法

编辑:
不建议使用eval(),如文档所述,切勿使用eval()!

感谢@Diogo Kollross


我正在处理相同的问题,并且正在尝试解决这种情况。因此,我创建了一种略有不同的方法。

FIDDLE

1
2
3
4
5
function isStringNumber(str) {
  var parsed = parseFloat(str);
  var casted = +str;
  return parsed === casted  && !isNaN(parsed) && !isNaN(casted);
}