JavaScript true false在if else语句中没有正确执行

时间:2014-12-12 22:09:10

标签: jquery angularjs javascript-events javascript

出于某种原因,当我使用true / false值并检查其中至少有一个值是否为true时,if / else语句无法正常工作。 我有这个:

 $scope.checkValues = function (qId) {
   var airport = $scope.airports[0].questID;
   var destAirport = $scope.destAirports[0].questID;
   var airportVal = isFalseOrUndefined($scope.answers[airport]);
   var destAirportVal = isFalseOrUndefined($scope.answers[destAirport])
   if (airportVal == false || destAirportVal == false) {
     $surveyNav.skipPage = true;
   }
 }

 function isFalseOrUndefined(val) {
   if(val == null || val === false) {
     return true;
   } else {
     return false;
   }
 }

在下面的图片中,您可以看到airportVal的值为true,同一场景中destAirportVal的另一个值为true,但我仍然可以正确使用进入if条件并设置范围值。

enter image description here

有没有人看到任何问题?

2 个答案:

答案 0 :(得分:0)

在Javascript中检查相等性时,您应该使用===和!==运算符。 Javascript Comparison and Logical operators

op1 === op2 - 将检查op1是否明确等于op2

op1!== op2 - 将检查op1是否明确等于op2

另外:你可以压缩你isFalseOrUndefined函数

注1:您实际上并未检查val是否未定义。 检查某些内容是否未定义:typeof val ==='undefined' 这与检查变量是否为空

不同

注2:请注意,此处的变量并不完全清楚。 $ scope.answers [airport]为false或null时,airportVal将等于true。这是你的意图吗?

$scope.checkValues = function (qId) {
    var airport = $scope.airports[0].questID;
    var destAirport = $scope.destAirports[0].questID;
    var airportVal = isFalseOrUndefined($scope.answers[airport]);
    var destAirportVal = isFalseOrUndefined($scope.answers[destAirport])

    if (airportVal === false || destAirportVal === false) {
        $surveyNav.skipPage = true;
    }
}

function isFalseOrUndefined(val) {
    return (val === null || val === false);
}

答案 1 :(得分:-2)

你的功能可能应该做它声称做的事情:

function isFalseOrUndefined(val) {
   return typeof val === 'undefined' || val === false || val === null || val === ''/* add this if you think it should be falsy*/;
}

但是,测试!val就足够了:

$scope.checkValues = function (qId) {
    var airport = $scope.airports[0].questID;
    var destAirport = $scope.destAirports[0].questID;
    if (!airport || !destAirport) {
          $surveyNav.skipPage = true;
    }
}
相关问题