Можете ли вы выполнить часть инструкции if условно?

#javascript #if-statement

#javascript #if-statement

Вопрос:

Допустим, у меня есть этот оператор if:

 if (
  username === firstname amp;amp;
  password !== fakePassword amp;amp;
  givenname === lastname

) {
  console.log(`Hi ${firstname}`)
}
  

Теперь я хочу, чтобы указанное имя было обязательным, если оно длиннее 3 символов:

 const givennameRequired = givenname.length > 3;
  

могу ли я изменить оператор if таким образом, чтобы в нем говорилось: «Если givennameRequired переменная имеет значение true, тогда позаботьтесь об этой части»

Таким образом, консоль регистрирует два параметра или три в зависимости от допустимости givennameRequired . Очевидно, я пытаюсь избежать использования if / else и иметь два журнала консоли

Грубым способом «sudo-code» (я знаю, что это недопустимо):

 if (
  username === firstname amp;amp;
  password !== fakePassword amp;amp;
  (
    if (givennameRequired) {
      givenname === lastname
    } else {
      return true;
    }
  )
) {
  console.log(`Hi ${firstname}`)
}
  

В принципе, если длина больше трех, вычислите givenname === lastname иначе, верните true и не беспокойтесь об этом.

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

1. Что означает «я хочу сделать это обязательным, если [что-то, что может быть истинным, только если оно уже существует]»? Если у вас несколько вариантов использования, то наличие внешнего и внутреннего if вполне нормально: «попытка избежать if / else» — неправильный способ программирования: если это то, что вам нужно, то это то, что вам нужно.

2. @Mike’Pomax’Camermans Я исправил !=== , в любом случае, это был какой-то sudo. Не уверен, что вы имеете в виду под своим вопросом, можете ли вы уточнить?

3. x.length > 3 может передаваться только, если x это уже реальная вещь, поэтому «требовать x, если x> 3» не имеет смысла: мы знаем , что он существует, требовать нечего: он прямо там.

Ответ №1:

Это может сделать то, что вы хотите:

 if (
  username === firstname amp;amp;
  password !== fakePassword amp;amp;
  (givenname.length <= 3 || givenname === lastname)

) {
  console.log(`Hi ${firstname}`)
}
  

if Условие беспокоит только для проверки givenname === lastname , если givenname.length > 3

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

1. При этом используется or, поэтому он будет выполняться, если длина больше трех, но все равно нужно проверить, равна ли она. Использование and здесь может привести к false, и он не будет выполняться, даже если должен.

2. Нет, || оператор не оценивает свой правый член, если его левый член равен true .

3. @cybersam Я думаю, что OP хочет добавить проверку в givennameRequired конец этого if , с каким-то другим условием.

4. Мой код выполняет givenname === lastname тест тогда и только тогда, когда givenname.length > 3 . В противном случае этот тест не выполняется. Это то, что вы хотите.

5. @dcp3450 givenname === lastname вычисляется только в том случае, если givenname.length <= 3 равно FALSE . givenname.length <= 3 является обратным givenname.length > 3 , что означает, что givenname === lastname вычисляется только в том случае, если givenname.length > 3 значение TRUE . Именно то, что вы хотите, верно?

Ответ №2:

Этого можно легко достичь с помощью инструкции if

 if (givenname.length > 3){
    //do something
}
else {
//do something else
}
  

Ответ №3:

Пытаюсь соответствовать вашему синтаксису. Что-то вроде этого должно сработать. Для вашего собственного здравомыслия я бы рассмотрел возможность вложения операторов if, чтобы вы могли предоставлять более точную обратную связь пользователю.

 if (username === firstname amp;amp; password !== fakePassword amp;amp; (givennamerequired == true amp;amp; givenname === lastname amp;amp; givenname.length() > 3))

) {
  console.log(`Hi ${firstname}`)
}
  

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

1. Если значение required равно false или длина меньше трех, круглые скобки вернут false и не будут запускать журнал. Однако он должен выполняться долго, поскольку два других равны, а заданное имя следует игнорировать.