Проблема с вложенным оператором if (внутри функции) в Javascript - PullRequest
0 голосов
/ 15 октября 2018

здесь впервые, и я столкнулся с проблемой ... ИДК, если это мой синтаксис или моя логика полностью неверна ...

var hasExperience;
var amountOfExperience;

function employed(hasExperience,amountOfExperience) {

  if(hasExperience === true){
    if(amountOfExperience > 5)
      return true;
  } else {
    return false;
  }
}

Кажется, он не хочет возвращать falseесли первые два, если заявления не встречаются ... кто-нибудь может помочь?

Спасибо!

1 Ответ

0 голосов
/ 15 октября 2018

Если вам нужно, чтобы оба оператора if оценивались до true, вы должны написать это так:

if(hasExperience === true && amountOfExperience > 5){
  return true;
} else {
  return false;
}

В вашем примере if(hasExperience === true), тогда вы запустите код внутри блока if, else запустить код внутри блока else.Важно понимать, что это полностью не зависит от того, что находится внутри блока if.

if(hasExperience === true){
    // code inside if block
} else {
    // code inside else block
}

Код внутри блока if оказывается другим оператором if, который будет return true if(amountOfExperience > 5) и ничего не делает иначе.Опять же, это не зависит от другого оператора if.

if(amountOfExperience > 5)
    return true;

Использование && означает, что оба оператора должны иметь значение true, чтобы выполнить код внутри ifблок.Вы можете прочитать больше об этом здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators


Кроме того, как некоторые другие заявили, вы можете просто написать свою функцию следующим образом:

function employed(hasExperience,amountOfExperience) {
    return hasExperience === true && amountOfExperience > 5;
}

После вашей оценки (hasExperience === true && amountOfExperience > 5) как логическое значение и возвращая это логическое значение, вы можете избежать выражения if все вместе.

Попробуйте поэкспериментировать с этим немного больше, чтобы понять, что происходит.


Обновление на основе комментария:

Вы также можете сделать это, используя вложенный if, но это делает код грязным и трудным для чтения.

if (hasExperience === true) {
    // only hasExperience is true
    if (amountOfExperience > 5) {
        // hasExperience is true and amountOfExperience is greater than 5
        return true;
    } else {
        // hasExperience is false and amountOfExperience is less than 5
        return false;
    }
} else {
    // hasExperience is false and we have no idea what amountOfExperience is
  return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...