JavaScript true false在if-else语句中未正确执行

JavaScript true false在if-else语句中未正确执行,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,出于某种原因,当我使用真/假值并检查至少一个值是否为真时,if/else语句无法正常工作。 我有这个: $scope.checkValues = function (qId) { var airport = $scope.airports[0].questID; var destAirport = $scope.destAirports[0].questID; var airportVal = isFalseOrUndefined($scope.answers[airport

出于某种原因,当我使用真/假值并检查至少一个值是否为真时,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条件并设置范围值


有人看到任何问题吗?

您的函数可能应该执行其声称的操作:

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

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

op1===op2-将检查op1是否显式等于op2

op1!==op2-将检查op1是否显式等于op2

另外:您可以压缩为FalseOrUndefined函数

注意1:您实际上并没有检查val是否未定义。 检查是否有未定义的内容:typeof val==='undefined' 这与检查变量是否为null不同

注意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);
}

我看不出
airportVal
的值是真的。相信我,要么不是,要么
destAirportVal
是假的。JS在您的环境中并没有从根本上被破坏。@Madbreaks您看到弹出窗口说的是true,这是因为我将鼠标放在airportVal变量上,这里是另一个带有destAirportVal thx的打印屏幕,用于帮助否,但未定义可以指定给truthy值Please。只需在vars上执行一些console.log调用。因为我在任何地方都看不到鼠标光标,所以我不知道你在悬停什么。关于你问题的描述似乎与你的代码不匹配。您说您正在“检查至少一个值是否为真”,但您的代码正在查找其中一个值是否为假。因此,仅仅因为
airportVal
为true并不意味着
desAirportVal
也为true,因此不会进入if语句。您是否忘记在示例中使用IsFalseOrUndefined函数?这不是答案。另外:
''==false;//正确
。不知道“空字符串”是什么意思“false或undefined”?你真的读过我的代码吗?你没有看到额外的
=
字符吗?这有很大的区别。别忘了检查undefined的值