Javascript 为什么angular.isNumber()不能按预期工作?
似乎AngularJS的Javascript 为什么angular.isNumber()不能按预期工作?,javascript,angularjs,Javascript,Angularjs,似乎AngularJS的angular.isNumber不起作用。它不适用于数字字符串。我做错什么了吗?我应该只使用isNaN() 我需要一些东西来看看一个字符串是否是一个数字(当它实际上是一个数字时),并且angular.isNumber()不允许我这样做,除非我乘以1,但如果我这样做,那么它将永远是真的。另外,NaN不是数字(根据定义),因此应返回false 在JavaScript中,typeof NaN==='number' 例如,如果需要将字符串识别为数字,请将其转换为数字,再转换回字符
angular.isNumber
不起作用。它不适用于数字字符串。我做错什么了吗?我应该只使用isNaN()
我需要一些东西来看看一个字符串是否是一个数字(当它实际上是一个数字时),并且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
我在处理同一个问题,我试图解决边缘问题。所以我创造了一个稍微不同的方法
function isStringNumber(str) {
var parsed = parseFloat(str);
var casted = +str;
return parsed === casted && !isNaN(parsed) && !isNaN(casted);
}
使用它如下所示
angular.isNumber(eval('99.55'))
对于其他表达式,我们也可以使用eval(input)
注意:
eval()
是一种javascript方法
编辑:
如文件所述,不建议使用eval()
谢谢@Diogo Kollross什么不起作用95.55'不是数字,而是字符串。同样,将一个字符串乘以一个数字,javascript会将该字符串解析/转换为一个数字,并尝试执行该操作。连接的工作方式不同,因为number+string将是一个字符串(javascript将数字转换为字符串)。。在NaN上优先选择。所以,它实际上是检查来源是否是一个数字。检查一个有效的
IsNumeric
方法。我认为这不是一个重复的链接问题。这个问题是关于angularJS isNumber方法的预期行为。这与NaN是否被视为“数字”类型无关。只想指出,如果您处理的是非常小或非常大(字符串)的数字,这可能会出现舍入错误。我只想将此链接添加到github页面上的一个问题,其中他们放弃了它,因为无法修复:警告:对于有效数字,如“0.0000005”,此方法返回false,因为(0.0000005)。JavaScript中的toString()==“5e-7”。@joelnet没有考虑这些类型的情况。+x.toString()==x
在哪里失败?您可以使用eval()
is来解释这些边缘情况。
angular.isNumber(eval('99.55'))