2016-01-11 2 views
1

У меня есть два свойства, где мне нужно проверить null и undefined как для каждого, так и как я могу использовать это в if else заявлениях?Как проверить null и undefined оба значения для свойства?

main.js

var validateControlRating = function() { 
      if (($scope.controlProcessRatingDTO.controlPerformanceRatingKey === null || 
       $scope.controlProcessRatingDTO.controlPerformanceRatingKey === undefined) 
       && 
       ($scope.controlProcessRatingDTO.controlDesignRatingKey === null || 
       $scope.controlProcessRatingDTO.controlDesignRatingKey === undefined)) { 
       $scope.caculatedRatingDiv = false; 
      } else { 
      $http.get('app/control/rest/calculateControlEffectiveness/' + $scope.controlProcessRatingDTO.controlDesignRatingKey + '/' + $scope.controlProcessRatingDTO.controlPerformanceRatingKey).success(function (data) { 
       $scope.calcaulatedRating = data; 
      }, function (error) { 
       $scope.statusClass ='status invalid userErrorInfo'; 
       var errorMessage = error.data.errorMsg; 
       if (error.data.techErrorMsg) { 
        errorMessage = error.data.techErrorMsg; 
       } 
       $scope.statusInfo = errorMessage; 
      }); 
      $scope.ratingValidationMsg = ''; 
      $scope.ratingWinValidationClass = 'valid'; 
      $scope.caculatedRatingDiv = true; 
      $scope.enableRatingSave = false; 
     } 
    }; 
+0

если (! $ Scope.controlProcessRatingDTO.controlPerformanceRatingKey && $ scope.controlProcessRatingDTO.controlDesignRatingKey) { –

+0

Вы также можете использовать не оператор, как указано выше, или как ответ @ adeneo, оба должны работать. –

+0

Я также сохранил значение в переменной в этих ситуациях, если длина этих значений вызывает беспокойство. if (perfKey === null || perfKey === undefined) и т. Д. – IrkenInvader

ответ

2

Это немного утомительно в JavaScript, вы должны написать каждое условие, а также использовать круглые скобки и т.д.

if (($scope.controlProcessRatingDTO.controlPerformanceRatingKey === null || 
     $scope.controlProcessRatingDTO.controlPerformanceRatingKey === undefined) 
     && 
    ($scope.controlProcessRatingDTO.controlDesignRatingKey === null || 
     $scope.controlProcessRatingDTO.controlDesignRatingKey === undefined)) {... 

или просто

if ([null, undefined].indexOf($scope.controlProcessRatingDTO.controlPerformanceRatingKey) === -1 
    && 
    [null, undefined].indexOf($scope.controlProcessRatingDTO.controlDesignRatingKey) === -1) {... 
+0

его не проверяют на нулевое и выполняющее условие else – aftab

+0

Уверенные работы для меня -> https://jsfiddle.net/wmqg67vq/2/ – adeneo

+0

Я отредактировал мой вопрос и добавил в соответствии с вашим ответом его все еще серьезную ошибку. Я не уверен, где мой код неправильный – aftab

0

Вы также можете использовать оператор negate, но t его бы заставить работать на «ложь», а также:

if (!$scope.controlProcessRatingDTO.controlPerformanceRatingKey && !$scope.controlProcessRatingDTO.controlDesignRatingKey) { 

Это немного короче, но если вы хотите, чтобы лечить Ложные ценности отдельно, а затем использовать ответ на Adeneo в выше.

1

Я думаю, что вам нужно, чтобы проверить эту correclty, проверьте undefined то для null и использовать && не ||, потому что ваш код будет перейдите к проверке значения null для неопределенной переменной, и это наверняка вызовет исключение код:

if(typeof myVar == 'undefined' ? false: myVar) 
{ // go here defined and value not null 

} 

или код:

if(typeof myVar != 'undefined' && myVar) 
{ // go here defined and value not null 

} 

В чеке код будет идти, как

if ((typeof $scope.controlProcessRatingDTO.controlDesignRatingKey !== undefined|| 
    typeof $scope.controlProcessRatingDTO.controlPerformanceRatingKey !== undefined) && 
    ($scope.controlProcessRatingDTO.controlDesignRatingKey !== null || 
     $scope.controlProcessRatingDTO.controlPerformanceRatingKey !== null)) { 
    // do home work 
}else { // do other home work } 
Смежные вопросы