看起来好像是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。
在 JavaScript的, typeof NaN === 'number'
。
如果你需要识别一个 串 作为一个 数把它投到 数,转换回来 串 例如,将此与输入进行比较。
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
使用如下,
angular.isNumber(eval('99.55'))
对于其他表达,我们也可以使用 eval(input)
。
注意: eval()
是一个JavaScript方法
我正在研究同样的问题,我正试图解决这个边缘案例。所以我创建了一个略有不同的方法。
小提琴
function isStringNumber(str) {
var parsed = parseFloat(str);
var casted = +str;
return parsed === casted && !isNaN(parsed) && !isNaN(casted);
}