2014-01-14 44 views
0

我有以下代码:我试图检查未定义的,但它不工作

$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字段为空),我检查PID与谷歌的开发工具它显示为“未定义”。但是,当代码运行时,它不会进入第一个条件。相反,它进入到第二,并给出一个错误说:

类型错误:对象#有没有方法“的indexOf”

谁能告诉我,为什么它忽略了第一个if语句?

这里是我所得到的,当我使用控制台检查第一行PID与if:

console.log(typeof pid) 
object 
undefined 
+0

如果它未定义,那么它应该进入第一个条件。试着制作一个*完整*简化的测试用例,以便我们看到问题所在。 – Quentin

+1

从看到错误信息并进入第二个条件,我会认为它是实际定义的,但没有'indexOf'方法(表示它不是一个字符串或数组)。在devtools中检查变量时,你确定你在正确的范围内吗?你可以'console.log(typeof pid)'? – SoonDead

+0

@SoonDead - 我做了控制台日志并更新了问题。 – Melina

回答

1

Here is what I get when I use the console to check pid on the first line with an if:

console.log(typeof pid) 
object 
undefined 

这是说的类型的pid是对象。它然后console.log()的返回值是undefined

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

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

-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; 
      } 
相关问题