11

看起来好像 AngularJSangular.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。

4

3 回答 3

16

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
于 2013-06-27T19:48:30.413 回答
0

如下使用它,

angular.isNumber(eval('99.55'))

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

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

编辑: 不建议使用eval(),因为文档说永远不要使用 eval()!

谢谢@Diogo Kollross

于 2018-06-05T17:21:04.907 回答
0

我正在解决同样的问题,我试图解决那个边缘情况。所以我创建了一个稍微不同的方法。

小提琴

function isStringNumber(str) {
  var parsed = parseFloat(str);
  var casted = +str;
  return parsed === casted  && !isNaN(parsed) && !isNaN(casted);
}
于 2016-10-18T16:07:37.423 回答