Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么angular.isNumber()不能按预期工作?_Javascript_Angularjs - Fatal编程技术网

Javascript 为什么angular.isNumber()不能按预期工作?

Javascript 为什么angular.isNumber()不能按预期工作?,javascript,angularjs,Javascript,Angularjs,似乎AngularJS的angular.isNumber不起作用。它不适用于数字字符串。我做错什么了吗?我应该只使用isNaN() 我需要一些东西来看看一个字符串是否是一个数字(当它实际上是一个数字时),并且angular.isNumber()不允许我这样做,除非我乘以1,但如果我这样做,那么它将永远是真的。另外,NaN不是数字(根据定义),因此应返回false 在JavaScript中,typeof NaN==='number' 例如,如果需要将字符串识别为数字,请将其转换为数字,再转换回字符

似乎AngularJS的
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'))