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…};