检查值是否为数字做某事

时间:2017-08-29 18:40:18

标签: javascript angularjs

我试图检查传递的值是字符串还是带有以下脚本的数字

$scope.checkval=function(res){
    console.log(res.profile_id)
    if(angular.isNumber(res.profile_id)){
        console.log('Number');
     }else {
        console.log('Center Code is not a number');
     }
}

从上面的代码我总是得到Center code is not a number,虽然传递的值是数字

4 个答案:

答案 0 :(得分:1)

该API不用于检查字符串是否为数字;它正在检查该值是否已经是一个数字。

最简单的方法是使用+一元运算符将值强制为数字,然后使用!isNaN()验证它实际上是一个可解析的数字字符串。

$scope.checkval = function(n) {
  return !isNaN(+n);
};

当值可以转换为实际数字时,它将返回true。请注意,常量NaN也是一个数字,但您可能不希望在"数字"的定义中包含NaN

答案 1 :(得分:0)

isNumber是一个非常准确的函数,所以我个人认为你传递的值可能是一个字符串。但是为了避免这个潜在的问题你可以做到这一点,它将消除字符串数字的可能性,但不能纠正不是的字符串。

$scope.checkval = function(res){
    //unary operator will convert the string into a number if appropriate
    var numberToCheck = +res;
    if (angular.isNumber(numberToCheck)) {
        console.log('Number');
     } else {
        console.log('Center Code is not a number');
     }
}

Pointy的解决方案是一个更好的方法,如果你不想/不能使用角度内置函数

答案 2 :(得分:0)

变量是否像'5'或5那样传递。

res.profile_id = 5; //would come out as true

res.profile_id = '5'; //would come out as false

答案 3 :(得分:0)

res.profile_id可能实际上是一个字符串。

如果您希望它是一个整数(就好像它是从DB返回的主键),您可以使用以下方法将它明确地转换为int:

res.profile_id = parseInt(res.profile_id, 10);

如果这是一个用户输入字段,或者响应中可能有文本,您可以这样测试:

if (!isNaN(res.profile_id){
    ...
}