Короткая логическая логика в JavaScript

#javascript #angularjs #boolean-logic #conditional-operator #shorthand

#javascript #angularjs #логическая логика #условный оператор #сокращение

Вопрос:

Я новичок в JavaScript и AngularJS. Итак, я сталкиваюсь со следующим кодом из книг Адама Фримена

 var selectedCategory = null;
...
$scope.categoryFilterFn = function(product) {
   return selectedCategory == null || 
      product.category === selectedCategory;
};
  

Меня смущает return приведенное выше утверждение, не могли бы вы, ребята, переписать приведенный выше код с помощью четкого кода (без сокращений).

Спасибо.

Ответ №1:

Это сокращенная форма возврата boolean значения. Посмотрите внимательно:

  return selectedCategory == null || product.category === selectedCategory;
  

Здесь return оператор имеет два выражения:

  1. selectedCategory == null
  2. product.category === selectedCategory

Когда метод вернется, он будет оценивать эти два выражения отдельно. Рассмотрим, что yout selectedCategory равно null , и product.category равно selectedCategory , тогда оператор равен

 return true || true;
  

что в конечном итоге упростит

 return true; // (true || true) = true
  

Аналогично, вы можете представить, что это выражение возвращает значение, подставляя значения и оценивая их отдельно.

Более длинная версия для этого:

 if (selectedCategory == null || product.category == selectedCategory) {
  return true;
} else {
  return false;
}
  

Комментарии:

1. В вашей длинной версии нет необходимости в else блоке.

2. @BenM Да. Я знаю. Просто поместите это туда, чтобы быть более понятным для OP, поскольку он новичок.

Ответ №2:

return Оператор может быть легко переписан как if() блок следующим образом:

 $scope.categoryFilterFn = function(product) {

   if( selectedCategory == null || product.category === selectedCategory )
   {
       return true;
   }

   return false;
};
  

По сути, return будет возвращено true , если выполняется любое из указанных условий true . В противном случае он вернется false .