好像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。
答案 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);
}