簡體   English   中英

JavaScript true false 在 if else 語句中沒有正確執行

[英]JavaScript true false not executing correctly in if else statement

出於某種原因,當我使用真/假值並檢查其中至少一個值是否為真時,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 條件並設置范圍值。

在此處輸入圖片說明

有人看到任何問題嗎?

在 Javascript 中檢查相等性時,您應該使用 === 和 !== 運算符。 Javascript 比較和邏輯運算符

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

您的函數可能應該做它聲稱要做的事情:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM