Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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 我试图检查未定义的,但它不工作_Javascript_Angularjs - Fatal编程技术网

Javascript 我试图检查未定义的,但它不工作

Javascript 我试图检查未定义的,但它不工作,javascript,angularjs,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 = nul

我有以下代码:

$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:对象没有“indexOf”方法

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

以下是我使用控制台检查第一行带有if的pid时得到的结果:

console.log(typeof pid)
object
undefined
console.log(typeof pid)
object
undefined
试试这个:

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;
            }
以下是我使用控制台检查第一行带有if的pid时得到的结果:

console.log(typeof pid)
object
undefined
console.log(typeof pid)
object
undefined
这表示pid的类型是一个对象。然后它表示console.log的返回值未定义

它不会进入第一个if,因为变量并不像您所想的那样是未定义的


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

如果它未定义,那么它应该进入第一个条件。试着生成一个完整的简化测试用例,这样我们就可以看到问题了。从看到错误消息到第二个条件,我认为它实际上已经定义了,但没有方法索引,这意味着它不是字符串或数组。在devtools中检查变量时,您确定自己在正确的范围内吗?你能用console.logtypeof pid吗?@SoonDead-我做了控制台日志并更新了问题。你如何在你的控制器中声明$scope.pid?不能在开始时将其设置为null而不是undefined?为什么在传递给$scope.$apply的函数中有一个pid参数?它隐藏外部pid参数。您应该在删除内部pid的情况下进行尝试。比如$scope.$applyfunction{…code…};