我试图检查未定义但它不起作用

时间:2014-01-14 07:45:49

标签: javascript angularjs

我有以下代码:

$scope.$watch("pid", _.debounce(function (pid) {

    var a = pid;

    $scope.$apply(function (pid) {
        if (typeof pid == "undefined" || pid == null || pid === "") {
            $scope.pidLower = null;
            $scope.pidUpper = null;
        }
        else if (pid.indexOf("-") > 0) {
            pid = pid.split("-");
            $scope.pidLower = parseInt(pid[0]);
            $scope.pidUpper = parseInt(pid[1]);
        }
        else {
            $scope.pidLower = parseInt(pid);
            $scope.pidUpper = null;
        }
    });
}, 1000));

第一次运行代码(当pid字段为空时)我使用google开发工具检查pid,它显示为“未定义”。但是,当代码运行时,它不会进入第一个if条件。相反,它转到第二个,并给出一个错误说:

TypeError:Object#没有方法'indexOf'

有人能告诉我为什么它会忽略第一个if语句吗?

以下是我使用控制台通过if:

检查第一行的pid时得到的结果
console.log(typeof pid)
object
undefined

2 个答案:

答案 0 :(得分:0)

  

以下是我使用控制台通过if:

检查第一行的pid时得到的结果
console.log(typeof pid)
object
undefined

这表示pid的类型是对象然后表示console.log()的返回值为undefined

它不会进入第一个if,因为变量不是,如你所想,未定义。

然后失败,因为无论对象pid是什么类型,它都不是indexOf方法的对象。

答案 1 :(得分:-1)

试试这个:

if (!pid) {
                $scope.pidLower = null;
                $scope.pidUpper = null;
            }
            else if (pid.indexOf("-") > 0) {
                pid = pid.split("-");
                $scope.pidLower = parseInt(pid[0]);
                $scope.pidUpper = parseInt(pid[1]);
            }
            else {
                $scope.pidLower = parseInt(pid);
                $scope.pidUpper = null;
            }