If js: if…else — JavaScript | MDN

Содержание

if…else — JavaScript | MDN

Инструкция if выполняет инструкцию, если указанное условие выполняется (истинно). Если условие не выполняется (ложно), то может быть выполнена другая инструкция.

if (условие)
   инструкция1
[else
   инструкция2]
условие
Выражение, которое является либо истинным, либо ложным.
инструкция1
Инструкция, выполняемая в случае, если значение "условиe" истинно (true). Может быть любой инструкцией в том числе и вложенным if. Для группировки нескольких инструкций используется блок ({...}), Когда никакого действия не требуется, может использоваться пустая инструкция.
инструкция2
Инструкция, выполняемая в случае, если значение "условиe" ложно (false). Может быть любой инструкцией, в том числе и вложенным if.
Инструкции тоже  можно группировать в блок.

Несколько команд if … else могут быть вложены для создания условия else if. Обратите внимание, что в JavaScript нет ключевого слова elseif (в одно слово).

if (условие1)
   инструкция1
else if (условие2)
   инструкция2
else if (условие3)
   инструкция3
...
else
   инструкция

Чтобы увидеть, как это работает, ниже представлен пример правильного вложения с отступами:

if (условие1)
   инструкция1
else
   if (условие2)
      инструкция2
   else
      if (условие3)
...

Чтобы выполнить несколько инструкций в условии, используйте блочный оператор ({…}) для группирования этих инструкций. В общем, хорошей практикой всегда является использование блочных операторов, особенно в коде, включающем вложенные операторы

if:

if (условие) {
   инструкции1
} else {
   инструкции2
}

Не путайте примитивные логические значения true и false с правдивостью или ложностью булева объекта. Любое значение, которое не undefined, null, 0, NaN или пустая строка («»), и любой объект, включая объект Boolean, значение которого является ложным, считается правдивым при использовании в качестве условия. Например:

var b = new Boolean(false);
if (b) 

Использование 

if...else
if (cipher_char === from_char) {
   result = result + to_char;
   x++;
} else {
   result = result + clear_char;
}

Использование 

else if

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

:

if (x > 5) {

} else if (x > 50) {

} else {

}

Присваивание в условном выражении

Целесообразно не использовать простые присваивания в условном выражении, потому что при взгляде на код присваивание можно путать с равенством. Например, не используйте следующий код:

Если вам нужно использовать присваивание в условном выражении, обычной практикой является размещение дополнительных скобок вокруг присваивания. Например:

BCD tables only load in the browser

Принятие решений в вашем коде — условные конструкции — Изучение веб-разработки

Во многих языках программирования код должен иметь возможность принимать решения на основе введённых пользователем данных. Например, в игре, если у пользователя осталось 0 жизней, то игра завершается. В приложении о погоде утром отображается восход солнца, а вечером звезды и луна. В этой статье мы рассмотрим как в  JavaScript работают так называемые «условия».

Необходимое условие:Базовая компьютерная грамотность, базовое понимание HTML и CSS, JavaScript first steps.
Цель:Понять принципы использования операторов условий в JavaScript.

Люди (и животные) принимают какие-либо решения всю жизнь, от малозначимых («стоит ли мне съесть одну печеньку или две?») до жизнеопределяющих («стоит ли мне остаться дома и работать на ферме отца или переехать в другую страну и изучать астрофизику?»)

Операторы условия в JavaScript позволяют нам указать разного рода действия в зависимости от выбранного пользователем или системой ответа (например одна печенька или две) и связать его с действием (результатом), например, результатом «съесть одну печеньку» будет «все ещё буду чувствовать себя голодным», а результатом «съесть две печеньки» будет «буду чувствовать себя сытым, но мама меня поругает за то, что я съел все сладости». 

Давайте глянем на наиболее распространённый тип условного оператора, который вы будете использовать в JavaScript —

if ... else оператор.

Базовый if … else синтаксис

Базовый if...else синтаксис выглядит как pseudocode:

if (condition) {
  code to run if condition is true
} else {
  run some other code instead
}

Что мы имеем:

  1. Ключевое слово if расположено перед круглыми скобками.
  2. Условие для проверки (condition), расположено внутри круглых скобок (например «это значение больше другого значения?», или «это значение существует?»). Это условие использует операторы сравнения (comparison operators), которые мы изучим позже, и возвратит нам true или false.
  3. Внутри скобок { } расположен код, который будет выполняться только в том случае, если условие (condition) верно (true).
  4. Ключевое слово else (иначе).
  5. Ещё скобки { }, код внутри которых выполнится, только если условие не верно (не true).

Этот код довольно читабелен — он говорит «

if (если)  condition (условие) возвращает true (истина), запусти код A, else (иначе) запусти B»

Стоит заметить, что  else и второй блок скобок { } не обязателен — следующий код так же будет работать:

if (condition) {
  код, который должен выполнить, если условие истина
}

какой-то другой код

Тем не менее, следует быть осторожным — в случае, если код внутри вторых скобок { } не контролируется условием, то этот код будет выполняться всегда. Это не плохо, просто вы должны помнить об этом, чаще вы хотите запустить один кусок кода или другой, но не оба.

И, наконец, иногда вы можете встретить код if...else без фигурных скобок в сокращённой форме:

if (condition) code to run if condition is true
else run some other code instead

Это абсолютно рабочий код, но он менее читаем, лучше использовать фигурные скобки, новые строки и отступы.

Реальный пример

Чтобы лучше понять синтаксис, давайте рассмотрим реальный пример. Представьте, что мать или отец попросили помочь с работой по дому своего ребёнка.  Родитель может сказать: «Если ты поможешь мне с покупками, то я дам тебе дополнительные деньги на карманные расходы, которые ты сможешь потратить на игрушку, какую захочешь».  В JavaScript, мы можем представить это так: 

var shoppingDone = false;

if (shoppingDone === true) {
  var childsAllowance = 10;
} else {
  var childsAllowance = 5;
}

В этом коде, как показано, всегда будет shoppingDone равный false, что означает разочарование для нашего бедного ребёнка. Мы должны предоставить механизм для родителя, чтобы установить для переменной shoppingDone значение  true , если ребёнок помог с покупками.

else if

В предыдущем примере предоставлено два выбора, или результата — но что, если мы хотим больше, чем два?

Существует способ привязать дополнительные варианты/результаты к вашему 

if...else — использоватьelse if. Для каждого дополнительного выбора требуется дополнительный блок, который нужно расположить между if() { ... } и else { ... } — проверьте следующий более сложный пример, который может быть частью простого приложения прогноза погоды:

<label for="weather">Выберите тип погоды сегодня: </label>
<select>
  <option value="">--Сделайте выбор--</option>
  <option value="sunny">Солнечно</option>
  <option value="rainy">Дождливо</option>
  <option value="snowing">Снежно</option>
  <option value="overcast">Облачно</option>
</select>

<p></p>
var select = document.querySelector('select');
var para = document.querySelector('p');

select.addEventListener('change', setWeather);

function setWeather() {
  var choice = select.value;

  if (choice === 'sunny') {
    para.textContent = 'Сегодня хорошо и солнечно. Носите шорты! Идите на пляж, или в парк, и купите мороженое.';
  } else if (choice === 'rainy') {
    para.textContent = 'Дождь падает за окном; возьмите плащ и зонт, и не находитесь слишком долго на улице.';
  } else if (choice === 'snowing') {
    para.textContent = 'Снег падает - морозно! Лучше всего посидеть с чашкой горячего шоколада или слепить снеговика.';
  } else if (choice === 'overcast') {
    para.textContent = 'Дождя нет, но небо серое и мрачное; он все может измениться в любую минуту, поэтому на всякий случай возьмите дождевик.';
  } else {
    para.textContent = '';
  }
}

  1. Здесь у нас есть элемент HTML <select> который позволяет нам выбирать разные варианты погоды и простой абзац.
  2. В JavaScript мы создаём ссылки на элементы <select> и <p> и добавляем обработчик события элемента <select>
    , чтобы при его изменении значения запускалась функция setWeather().
  3. Когда функция будет запущена, первоначально мы определим значение переменной choice, которая равна выбранному значению в элементе  <select>. Затем мы используем условный оператор для отображения текста внутри абзаца в зависимости от того, какое значение у переменной  choice. Обратите внимание, как все условия проверяются в else if() {...} блоках, за исключением первого, который использует if() {...}блок.
  4. Последний выбор, внутри  else {...} блока, в основном является «последним средством» — код внутри него будет запущен, если ни одно из условий не будет true. В этом случае он служит для удаления текста из абзаца, если ничего не выбрано, например, если пользователь решает повторно выбрать опцию «—Сделайте выбор—» которая указана в начале.

Примечание об операторах сравнения

Операторы сравнения используют для проверки условий внутри наших условных операторов. Сначала мы посмотрели на операторы сравнения в  нашей статье Базовая математика в JavaScript — цифры и операторы . Наш выбор это:

  • === и !== — проверяет одно значение идентично или не идентично другому.
  • < и > — проверяет одно значение меньше или больше, чем другое.
  • <= и >= — проверяет одно значение меньше или равно, либо больше или равно другому.

Примечание: Просмотрите материал по предыдущей ссылке, если вы хотите освежить свою память.

Мы хотели бы особо обратить внимание на проверку булевых значений (true/false),  и общий шаблон, который вы будете встречать снова и снова. Любое значение, которое не есть  false, undefined, null, 0, NaN, или пустая строка ('') фактически возвращает true при тестировании как условного оператора. Поэтому вы можете просто использовать имя собственной переменной, чтобы проверить, равна ли она true, или существует (т. е. переменная не равна undefined). Например:

var cheese = 'Cheddar';

if (cheese) {
  console.log('Ура! Есть сыр для приготовления бутерброда.');
} else {
  console.log('Сегодня нет сыра для бутерброда.');
}

И, возвращаясь к нашему предыдущему примеру о ребёнке, выполняющем поручение своего родителя, вы можете это записать так:

var shoppingDone = false;

if (shoppingDone) { 
  var childsAllowance = 10;
} else {
  var childsAllowance = 5;
}

Вложенность if … else

Вполне нормально использовать один условный оператор if...else внутри другого — вложить их. Например, мы могли бы обновить наше приложение прогноза погоды, чтобы показать ещё один набор вариантов в зависимости от температуры:

if (choice === 'sunny') {
  if (temperature < 86) {
    para.textContent = 'Сейчас ' + temperature + ' градусов по фаренгейту — хорошо и солнечно. Идите на пляж, или в парк, и купите мороженое.';
  } else if (temperature >= 86) {
    para.textContent = 'Сейчас ' + temperature + ' градусов по фаренгейту — Жара! Если вы хотите выйти на улицу, обязательно используйте солнцезащитный крем.';
  }
}

Несмотря на то, что весь код работает вместе, каждый условный оператор if...else работает полностью отдельно от другого.

Логические операторы: И, ИЛИ и НЕ

Если вы хотите проверить несколько условий без записи вложенных if...else условий, логические операторы помогут вам. При использовании в условиях, первые два оператора делают следующее:

  • && — И; позволяет объединить два или более выражения так, что каждое из них отдельно должно иметь значение true , чтобы в итоге общее выражение имело значение true.
  • || — ИЛИ; позволяет объединить два или более выражения так, что одно или несколько из них должно иметь значение true , чтобы в итоге общее выражение имело значениеtrue.

Чтобы дать вам пример оператора И, предыдущий фрагмент кода можно переписать так:

if (choice === 'sunny' && temperature < 86) {
  para.textContent = 'Сейчас ' + temperature + ' градусов по фаренгейту — хорошо и солнечно. Идите на пляж, или в парк, и купите мороженое.';
} else if (choice === 'sunny' && temperature >= 86) {
  para.textContent = 'Сейчас ' + temperature + ' градусов по фаренгейту — Жара! Если вы хотите выйти на улицу, обязательно используйте солнцезащитный крем.';
}

Так, для примера, первый блок кода выполнится только в том случае, если  choice === 'sunny' иtemperature < 86 вернут значение true.

Давайте посмотрим на быстрый пример оператора ИЛИ:

if (iceCreamVanOutside || houseStatus === 'в огне') {
  
  console.log('Вы должны быстро покинуть дом.');
} else {
  console.log('Вероятно, можно в нем оставаться.');
}

Последний тип логического оператора НЕ, выраженный ! оператором, можно использовать для отрицания выражения. Давайте объединим его с ИЛИ в приведённом выше примере:

if (!(iceCreamVanOutside || houseStatus === 'on fire')) {
  console.log('Вероятно, можно в нем оставаться.');
} else {
  console.log('Вы должны быстро покинуть дом.');
}

В этом фрагменте, если условие ИЛИ возвращает true, оператор НЕ будет отрицать это и выражение вернёт false.

Можно сочетать любое количество логических операторов, в любой последовательности и в любой комбинации. В следующем примере код в блоке будет выполняться только в том случае, если оба условия с ИЛИ возвращают true, а следовательно, и оператор И возвращает true:

if ((x === 5 || y > 3 || z <= 10) && (loggedIn || userName === 'Steve')) {
  
}

Распространённой ошибкой при использовании логического оператора ИЛИ в условном выражении является указание переменной, значение которой нужно проверить со списком возможных значений этой переменной, разделённых операторами || (ИЛИ). Например.

if (x === 5 || 7 || 10 || 20) {
  
}

В данном примере условие в if(...)  всегда будет оцениваться как true, поскольку 7 (или любое другое ненулевое значение) всегда будет оцениваться как true. Фактически, это условие гласит «если х равен 5, или 7 является true». Но нам требуется совсем не это. Чтобы достичь нужной цели, придётся выполнять полноценную проверку после каждого оператора ИЛИ:

if (x === 5 || x === 7 || x === 10 ||x === 20) {
  
}

Выражения if...else отлично справляются с добавлением условного кода, однако они не лишены недостатков. Они хорошо подходят для ситуации, когда имеется всего пара вариантов развития событий, каждый из которых имеет блок с приемлемым количеством кода, а также в случаях, когда условие является довольно сложным и включает несколько логических операторов. Если же нам требуется всего лишь задать переменную для определённого выбранного значения или напечатать конкретную фразу при определённом условии, изученный нами синтаксис может оказаться довольно громоздким, особенно если имеется большое количество вариантов выбора.

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

switch (выражение) {
  case choice1:
    выполнить этот код
    break;

  case choice2:
    выполнить этот код, а не предыдущий
    break;

  // вариантов может быть любое количество

  default:
    а вообще-то, выполнить только этот код
}

Что мы имеем:

  1. Ключевое слово switch, за которым следует пара круглых скобок.
  2. В скобках приводится выражение или значение.
  3. Ключевое слово case, за которым следует вариант выбора (именно он проверяется на соответствие выражению или значению) и двоеточие.
  4. Код, который будет выполняться, если вариант совпадает с выражением.
  5. Оператор break, за которым следует точка с запятой. Если вариант совпал с выражением или значением, браузер закончит выполнять блок кода, дойдя до оператора break, и перейдёт к выполнению кода, расположенного после оператора switch.
  6. Вариантов выбора (пункты 3–5) может быть любое количество.
  7. Ключевое слово default используется точно также, как любой другой вариант выбора (пункты 3–5) за тем исключением, что после default нет других вариантов выбора, поэтому инструкция break не требуется, никакого кода дальше нет. Это вариант выбора по умолчанию, выбираемый, если ни один из других вариантов не совпал с выражением.

Примечание. Вариант выбора default может быть пропущен, если выражение гарантированно совпадёт с одним из вариантов выбора. В противном случае вариант default необходим.

Пример оператора switch

Давайте рассмотрим реальный пример — перепишем наше приложение прогноза погоды с использованием оператора switch:

<label for="weather">Выберите тип погоды сегодня: </label>
<select>
  <option value="">--Сделайте выбор--</option>
  <option value="sunny">Солнечно</option>
  <option value="rainy">Дождливо</option>
  <option value="snowing">Снежно</option>
  <option value="overcast">Облачно</option>
</select>

<p></p>
var select = document.querySelector('select');
var para = document.querySelector('p');

select.addEventListener('change', setWeather);


function setWeather() {
  var choice = select.value;

  switch (choice) {
    case 'sunny':
      para.textContent = 'Сегодня хорошо и солнечно. Наденьте шорты! Идите на пляж или в парк, и купите мороженое.';
      break;
    case 'rainy':
      para.textContent = 'На улице дождь. Возьмите плащ и зонт, и не гуляйте слишком долго';
      break;
    case 'snowing':
      para.textContent = 'Идёт снег - морозно! Лучше всего посидеть с чашкой горячего шоколада или слепить снеговика.';
      break;
    case 'overcast':
      para.textContent = 'Дождя нет, но небо серое и мрачное; он все может измениться в любую минуту, поэтому на всякий случай возьмите дождевик.';
      break;
    default:
      para.textContent = '';
  }
}

Это последний теоретический раздел данной статьи и мы перейдём к практическим упражнениям. Тернарный или условный оператор имеет простой синтаксис: он проверяет условие и возвращает одно значение или выражение, если условие является true, и другое значение/выражение, если условие является false. Часто это очень удобная альтернатива блоку if...else, позволяющая затрачивать меньшие усилия на написание кода, когда имеется всего лишь два варианта, выбираемых на основе условия true/false. Общая схема оператора:

( условие) ? выполнить этот код : выполнить этот код вместо первого

Приведём простой пример:

var greeting = ( isBirthday ) ? 'С днём рождения, г-н Кузнецов! Хорошо вам повеселиться!' : 'Доброе утро, г-н Кузнецов.';

У нас есть переменная isBirthday , если она true, мы отправляем посетителю поздравление с днём рождения; если нет – выдаём стандартное приветствие.

Пример тернарного оператора

При использовании тернарного оператора не обязательно ограничиваться лишь значениями переменной, можно выполнять функции или строки кода; все, что угодно. В следующем примере показано простое средство выбора темы, задающее внешний вид веб-сайта с помощью тернарного оператора.

<label for="theme">Выберите тему: </label>
<select>
  <option value="white">Белая</option>
  <option value="black">Чёрная</option>
</select>

<h2>Это мой веб-сайт</h2>
var select = document.querySelector('select');
var html = document.querySelector('html');
document.body.style.padding = '10px';

function update(bgColor, textColor) {
  html.style.backgroundColor = bgColor;
  html.style.color = textColor;
}

select.onchange = function() {
  ( select.value === 'black' ) ? update('black','white') : update('white','black');
}

Мы используем элемент <select> для выбора темы (чёрная или белая), а также простой <h2> (en-US) для отображения заголовка веб-сайта. Кроме того, у нас есть функция update(), принимающая в качестве параметров (входных данных) два цвета. В качестве фона используется первый переданный цвет, а в качестве цвета текста – второй переданный цвет.

Наконец, у нас есть обработчик событий onchange , использующийся для запуска функции, содержащей тернарный оператор. Сначала она проверяет условие — select.value === 'black'. Если возвращается true, мы запускаем функцию update() с параметрами чёрного и белого, в результате чего получаем чёрный цвет фона и белый цвет текста. Если возвращается false, мы запускаем функцию update() с параметрами белого и чёрного, в результате чего цвета веб-сайта меняются на противоположные.

В данном примере вы поможете нам закончить простое приложение календаря. Код включает:

  • Элемент <select>, позволяющий пользователю выбирать разные месяцы.
  • Обработчик событий onchange для обнаружения изменения значения, выбранного в меню <select>.
  • Функция createCalendar() , рисующая календарь и отображающая правильный месяц в элементе <h2> (en-US).

Вы должны написать условную конструкцию в функции обработчика onchange , сразу после комментария // ДОБАВЬТЕ СЮДА УСЛОВНОЕ ВЫРАЖЕНИЕ. Конструкция должна:

  1. Проверить выбранный месяц (хранящийся в переменной choice. Это будет значение элемента <select> после изменения значения, например, «Январь».)
  2. Задать переменную, скажем, days, равную количеству дней в выбранном месяце. Для этого нужно будет проверить количество дней в каждом месяце. Високосный год можно не учитывать.

Советы:

  • Советуем использовать логический оператор OR для группировки нескольких месяцев в рамках одного условия; многие месяцы имеют одинаковое количество дней.
  • Подумайте, какое количество дней в месяце встречается чаще всего и используйте его в качестве варианта по умолчанию.

Если допустили ошибку, используйте кнопку «Сброс», чтобы вернуться к исходному виду примера. Если у вас совсем ничего не получается, нажмите «Показать решение».

В HTML коде внутри <select> названия месяцев value="" введены на русском языке. Соответственно ссылки на них из вашего скрипта так же на русском. Не забываем про синтаксис. (прим. — ConstantineZz)

В данном примере вы будете использовать пример тернарного оператора, который мы рассматривали ранее, и превратите тернарный оператор в инструкцию switch, что позволит увеличить количество вариантов выбора для простого веб-сайта. Посмотрите на <select> — на этот раз он включает не два, а целых пять вариантов тем. Нужно добавить инструкцию switch сразу под комментарием // ДОБАВЬТЕ ИНСТРУКЦИЮ SWITCH:

  • Она должна принимать переменную choice в качестве входного выражения.
  • Каждый элемент case должен содержать вариант выбора, соответствующий одному из доступных для выбора значений: белая, чёрная, лиловая, жёлтая или психоделическая тема.
  • В блоке каждого элемента case необходимо вызывать функцию update(), которой передаётся два цвета: первый – это цвет фона, а второй – цвет текста. Помните, что значения цветов – это строковые значения, поэтому их нужно заключать в кавычки.

Если допустили ошибку, используйте кнопку «Сброс», чтобы вернуться к исходному виду примера. Если у вас совсем ничего не получается, нажмите «Показать решение».

Это все, что вам нужно знать на данный момент об условных логических структурах! Уверены, вы хорошо разобрались в теоретическом материале и с лёгкостью справились с предложенными упражнениями. Если же что-то осталось для вас непонятным, перечитайте статью ещё раз или свяжитесь с нами.

Заявления if…else | Учебник JavaScript



Условные заявления используются для выполнения разных действий в зависимости от разных условий.


Условные заявления

Очень часто, когда вы пишете код, вы хотите выполнять разные действия для разных решений.

Для этого вы можете использовать в своем коде условные заявления.

В JavaScript есть следующие условные заявления:

  • Используется if для указания блока кода, который будет выполняться, если указанное условие истинно
  • Используется else для указания блока кода, который будет выполняться, если то же условие ложно
  • Используйте else if, чтобы указать новое условие для проверки, если первое условие ложно
  • Используйтеся switch для указания множества альтернативных блоков кода для выполнения

Заявление switch описывается в следующей главе.


Заявление if

Используйте if заявление, чтобы указать блок кода JavaScript, который будет выполняться, если условие истинно.

Синтаксис

if (condition) {
  //  блок кода, который должен быть выполнен, если условие истинно
}

Обратите внимание, что if это строчные буквы. Прописные буквы (If или IF) вызовут ошибку JavaScript.

Пример

Сделайте приветствие «Добрый день», если час меньше 18:00:

if (hour < 18) {
  greeting = «Добрый день»;
}

Результатом приветствия будет:

Попробуйте сами »

Заявление else

Используйте else заявление, чтобы указать блок кода, который будет выполняться, если условие ложно.

if (condition) {
  //  блок кода, который будет выполнен, если условие истинно
} else {
  //  блок кода, который будет выполнен, если условие ложно
}

Пример

Если час меньше 18, создайте приветствие «Добрый день», в противном случае «Добрый вечер»:

if (hour < 18) {
  greeting = «Добрый день»;
} else {
  greeting = «Добрый вечер»;
}

Результатом приветствия будет:

Попробуйте сами »

Заявление else if

Используйте else if заявление, чтобы указать новое условие, если первое условие ложно.

Синтаксис

if (condition1) {
  //  блок кода, который должен быть выполнен, если условие1 истинно
} else if (condition2) {
  //  блок кода, который должен быть выполнен, если условие1 ложно, а условие2 истинно
} else {
  //  блок кода для выполняться, если условие1 ложно, а условие2 ложно
}

Пример

Если время меньше 10:00, создайте приветствие «Доброе утро», если нет, но время меньше 20:00, создайте приветствие «Добрый день», в противном случае — «Добрый вечер»:

if (time < 10) {
  greeting = «Доброе утро»;
} else if (time < 20) {
  greeting = «Добрый день»;
} else {
  greeting = «Добрый вечер»;
}

Результатом приветствия будет:

Попробуйте сами »

Больше примеров

Случайная ссылка
в этом примере будет записана ссылка либо на Schoolsw3, либо на Всемирный фонд дикой природы (WWF). При использовании случайного числа вероятность каждой ссылки составляет 50%.



Условный рендеринг – React

React позволяет разделить логику на независимые компоненты. Эти компоненты можно показывать или прятать в зависимости от текущего состояния.

Условный рендеринг в React работает так же, как условные выражения работают в JavaScript. Бывает нужно объяснить React, как состояние влияет на то, какие компоненты требуется скрыть, а какие — отрендерить, и как именно. В таких ситуациях используйте условный оператор JavaScript или выражения подобные if.

Рассмотрим два компонента:

function UserGreeting(props) {
  return <h2>С возвращением!</h2>;
}

function GuestGreeting(props) {
  return <h2>Войдите, пожалуйста.</h2>;
}

Можно создать компонент Greeting, который отражает один из этих компонентов в зависимости от того, выполнен ли вход на сайт:

function Greeting(props) {
  const isLoggedIn = props.isLoggedIn;
  if (isLoggedIn) {    return <UserGreeting />;  }  return <GuestGreeting />;}
ReactDOM.render(
  
  <Greeting isLoggedIn={false} />,  document.getElementById('root'));

Посмотреть на CodePen

В этом примере рендерится различное приветствие в зависимости от значения пропа isLoggedIn.

Переменные-элементы

Элементы React можно сохранять в переменных. Это может быть удобно, когда какое-то условие определяет, надо ли рендерить одну часть компонента или нет, а другая часть компонента остаётся неизменной.

Рассмотрим ещё два компонента, представляющих кнопки Войти (Login) и Выйти (Logout).

function LoginButton(props) {
  return (
    <button onClick={props.onClick}>
      Войти
    </button>
  );
}

function LogoutButton(props) {
  return (
    <button onClick={props.onClick}>
      Выйти
    </button>
  );
}

В следующем примере мы создадим компонент с состоянием и назовём его LoginControl.

Он будет рендерить либо <LoginButton />, либо <LogoutButton /> в зависимости от текущего состояния. А ещё он будет всегда рендерить <Greeting /> из предыдущего примера.

class LoginControl extends React.Component {
  constructor(props) {
    super(props);
    this.handleLoginClick = this.handleLoginClick.bind(this);
    this.handleLogoutClick = this.handleLogoutClick.bind(this);
    this.state = {isLoggedIn: false};
  }

  handleLoginClick() {
    this.setState({isLoggedIn: true});
  }

  handleLogoutClick() {
    this.setState({isLoggedIn: false});
  }

  render() {
    const isLoggedIn = this.state.isLoggedIn;
    let button;
    if (isLoggedIn) {      button = <LogoutButton onClick={this.handleLogoutClick} />;    } else {      button = <LoginButton onClick={this.handleLoginClick} />;    }
    return (
      <div>
        <Greeting isLoggedIn={isLoggedIn} />        {button}      </div>
    );
  }
}

ReactDOM.render(
  <LoginControl />,
  document.getElementById('root')
);

Посмотреть на CodePen

Нет ничего плохого в том, чтобы объявить переменную и условно рендерить компонент if-выражением. Но иногда хочется синтаксис покороче. Давайте посмотрим на несколько других способов писать условия прямо в JSX.

Встроенные условия if с логическим оператором &&

Вы можете внедрить любое выражение в JSX, заключив его в фигурные скобки. Это правило распространяется и на логический оператор && языка JavaScript, которым можно удобно вставить элемент в зависимости от условия:

function Mailbox(props) {
  const unreadMessages = props.unreadMessages;
  return (
    <div>
      <h2>Здравствуйте!</h2>
      {unreadMessages.length > 0 &&        <h3>          У вас {unreadMessages.length} непрочитанных сообщений.        </h3>      }    </div>
  );
}

const messages = ['React', 'Re: React', 'Re:Re: React'];
ReactDOM.render(
  <Mailbox unreadMessages={messages} />,
  document.getElementById('root')
);

Посмотреть на CodePen

Приведённый выше вариант работает корректно, потому что в JavaScript выражение true && expression всегда вычисляется как expression, а выражение false && expression — как false.

То есть, если условие истинно (true), то элемент, идущий непосредственно за &&, будет передан на вывод. Если же оно ложно (false), то React проигнорирует и пропустит его.

Обратите внимание, что ложное выражение, как ожидается, пропустит элемент после &&, но при этом выведет результат этого выражения. В примере ниже метод render вернёт <div>0</div>.

render() {
  const count = 0;  return (
    <div>
      { count && <h2>Количество сообщений: {count}</h2>}    </div>
  );
}

Встроенные условия if-else с тернарным оператором

Есть ещё один способ писать условия прямо в JSX. Вы можете воспользоваться тернарным оператором condition ? true : false.

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

render() {
  const isLoggedIn = this.state.isLoggedIn;
  return (
    <div>
      Пользователь <b>{isLoggedIn ? 'сейчас' : 'не'}</b> на сайте.    </div>
  );
}

Этот метод можно использовать и с выражениями покрупнее, но это может сделать код менее очевидным:

render() {
  const isLoggedIn = this.state.isLoggedIn;
  return (
    <div>
      {isLoggedIn        ? <LogoutButton onClick={this.handleLogoutClick} />
        : <LoginButton onClick={this.handleLoginClick} />      }
    </div>  );
}

Как в JavaScript, так и в React выбор синтаксиса зависит от ваших предпочтений и принятого в команде стиля. Не забывайте, что если какое-то условие выглядит очень сложным, возможно пришло время извлечь часть кода в отдельный компонент.

Предотвращение рендеринга компонента

В редких случаях может потребоваться позволить компоненту спрятать себя, хотя он уже и отрендерен другим компонентом. Чтобы этого добиться, верните null вместо того, что обычно возвращается на рендеринг.

Например, будет ли содержимое <WarningBanner /> отрендерено, зависит от значения пропа под именем warn. Если значение false, компонент ничего не рендерит:

function WarningBanner(props) {
  if (!props.warn) {    return null;  }
  return (
    <div className="warning">
      Предупреждение!
    </div>
  );
}

class Page extends React.Component {
  constructor(props) {
    super(props);
    this.state = {showWarning: true};
    this.handleToggleClick = this.handleToggleClick.bind(this);
  }

  handleToggleClick() {
    this.setState(state => ({
      showWarning: !state.showWarning
    }));
  }

  render() {
    return (
      <div>
        <WarningBanner warn={this.state.showWarning} />        <button onClick={this.handleToggleClick}>
          {this.state.showWarning ? 'Спрятать' : 'Показать'}
        </button>
      </div>
    );
  }
}

ReactDOM.render(
  <Page />,
  document.getElementById('root')
);

Посмотреть на CodePen

Сам факт возврата null из метода render компонента никак не влияет на срабатывание методов жизненного цикла компонента. Например, componentDidUpdate будет всё равно вызван.

JavaScript, если иначе, если


Условные операторы используются для выполнения различных действий в зависимости от различных условий.


Условные отчеты

Очень часто, когда вы пишете код, вы хотите выполнять разные действия для разных решений.

Для этого в коде можно использовать условные операторы.

В JavaScript у нас есть следующие условные операторы:

  • Используйте , если , чтобы указать блок кода, который должен быть выполнен, если указанное условие истинно
  • Используйте else , чтобы указать блок кода, который должен быть выполнен, если такое же условие ложь
  • Используйте else, если , чтобы указать новое условие для проверки, если первое условие ложно
  • Используйте переключатель , чтобы указать множество альтернативных блоков кода, которые должны быть выполнены

Оператор switch описывается в следующей главе.


Заявление if

Используйте оператор if , чтобы указать блок кода JavaScript для выполняться, если условие истинно.

Синтаксис

if ( condition ) {
// блок кода, который должен быть выполнен, если условие истинно
}

Обратите внимание, что , если написано строчными буквами. Прописные буквы (If или IF) вызовут ошибку JavaScript.

Пример

Сделайте приветствие «Добрый день», если час меньше 18:00:

if (hour <18) {
welcome = «Добрый день»;
}

Результат приветствия будет:

Попробуй сам »

Заявление else

Используйте оператор else , чтобы указать блок кода, который будет выполняется, если условие ложный.

if ( condition ) {
// блок кода, который должен быть выполнен, если условие истинно
} еще {
// блок кода, который будет выполнен, если условие ложно
}

Пример

Если час меньше 18, создать «Добрый день» приветствие, иначе «Добрый вечер»:

if (hour <18) {
welcome = «Добрый день»;
} else {
welcome = «Добрый вечер»;
}

Результат приветствия будет:

Попробуй сам »

Заявление else if

Используйте оператор else if , чтобы указать новое условие, если первое условие ложно.

Синтаксис

if ( condition1 ) {
// блок кода, который должен быть выполнен, если condition1 истинно
} else if ( condition2 ) {
// блок кода, который должен быть выполнен, если condition1 ложно, а condition2 истинно
} else {
// блок кода, который должен быть выполнен, если условие1 ложно, а условие2 равно ложный
}

Пример

Если время меньше 10:00, создать «Хорошее утро» приветствие, если нет, но время меньше 20:00, создайте приветствие «Добрый день», в противном случае «Добрый вечер»:

if (time <10) {
welcome = «Доброе утро»;
} иначе, если (время <20) {
welcome = «Добрый день»;
} else {
welcome = «Добрый вечер»;
}

Результат приветствия будет:

Попробуй сам »

Другие примеры

Случайная ссылка
В этом примере будет записана ссылка либо на W3Schools, либо на World Wildlife. Фонд (WWF).Используя случайное число, существует 50% шанс для каждого из ссылки.




Заявление о переключении JavaScript


Оператор switch используется для выполнения различных действий в зависимости от различных условий.


Заявление о переключении JavaScript

Используйте оператор switch , чтобы выбрать один из множества кодовых блоков для выполнения.

Синтаксис

switch ( выражение ) {
case x :
// кодовый блок
break;
case y :
// кодовый блок
break;
по умолчанию:
// кодовый блок
}

Вот как это работает:

  • Выражение переключения вычисляется один раз.
  • Значение выражения сравнивается со значениями для каждого случая.
  • Если есть совпадение, выполняется связанный блок кода.
  • Если совпадений нет, выполняется блок кода по умолчанию.

Пример

Метод getDay () возвращает день недели как число между 0 и 6.

(воскресенье = 0, понедельник = 1, вторник = 2 ..)

В этом примере для вычисления названия дня недели используется номер дня недели:

переключатель (новая дата ().getDay ()) {
case 0:
day = «Воскресенье»;
перерыв;
case 1:
day = «Понедельник»;
перерыв;
case 2:
day = «вторник»;
перерыв;
case 3:
day = «среда»;
перерыв;
case 4:
day = «Четверг»;
перерыв;
case 5:
day = «Пятница»;
перерыв;
case 6:
day = «суббота»;
}

Результат дня будет:

Попробуй сам »

Разрыв Ключевое слово

Когда JavaScript достигает разрыва ключевое слово, оно выходит из блока переключателя.

Это остановит выполнение внутри блока переключателя.

Последний корпус в блоке переключателя ломать не нужно. Блок все равно там ломается (кончается).

Примечание: Если вы опустите оператор break, следующий регистр будет выполнен, даже если оценка не соответствует случаю.


Ключевое слово по умолчанию

Ключевое слово по умолчанию определяет код для запуска, если нет совпадение регистра:

Пример

Метод getDay () возвращает день недели как число между 0 и 6.

Если сегодня ни суббота (6), ни воскресенье (0), напишите сообщение по умолчанию:

переключатель (новая дата (). getDay ()) {
case 6:
text = «Сегодня суббота»;
перерыв;
case 0:
text = «Сегодня воскресенье»;
перерыв;
по умолчанию:
text = «С нетерпением жду выходных»;
}

Результат текста будет:

Попробуй сам »

Случай по умолчанию не обязательно должен быть последним регистром в коммутаторе блок:

Пример

переключатель (новая дата ().getDay ()) {
default:
text = «С нетерпением жду выходных»;
перерыв;
case 6:
text = «Сегодня суббота»;
перерыв;
case 0:
text = «Сегодня воскресенье»;
}

Попробуй сам »

Если default — не последний регистр в блоке переключения, не забудьте закончить регистр по умолчанию перерывом.


Общие кодовые блоки

Иногда вам захочется другого переключить случаи, чтобы использовать то же самое код.

В этом примере случай 4 и 5 используют один и тот же блок кода, а 0 и 6 совместно используют другой блок кода:

Пример

switch (new Date (). getDay ()) {
case 4:
case 5:
text = «Скоро выходные»;
перерыв;
case 0:
case 6:
text = «Выходные»;
перерыв;
по умолчанию:
text = «С нетерпением жду выходных»;
}

Попробуй сам »

Сведения о переключении

Если несколько наблюдений соответствуют значению случая, выбирается первый случай .

Если совпадений не найдено, программа переходит к метке по умолчанию .

Если метка по умолчанию не найдена, программа переходит к оператору (операторам) после переключателя .


Строгое сравнение

Случаи коммутатора используют строгое сравнение (===).

Для совпадения значения должны быть одного типа.

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

В этом примере не будет совпадения для x:

Пример

пусть x = «0»; Переключатель
(x) {
case 0:
text = «Off»;
перерыв;
case 1:
text = «Вкл.»;
перерыв;
по умолчанию:
text = «Значение не найдено»;
}

Попробуй сам »


Условный (тернарный) оператор — JavaScript

Условный (тернарный) оператор — это только оператор JavaScript, который принимает три операнда: условие, за которым следует вопросительный знак (? ), затем выражение, которое нужно выполнить, если условие truthy, за которым следует двоеточие (: ), и, наконец, выражение для выполнения, если условие ложное.Этот оператор часто используется как ярлык для , если утверждение.

  состояние? exprIfTrue: exprIfFalse  

Параметры

условие
Выражение, значение которого используется как условие.
exprIfTrue
Выражение, которое вычисляется, если условие оценивается как истинное значение (которое равно или может быть преобразовано до правда ).
exprIfFalse
Выражение, которое выполняется, если условие ложный (то есть имеет значение, которое может быть преобразовано в ложь ).

Помимо false , возможные ложные выражения: null , NaN , 0 , пустая строка ( "" ) и не определено . Если условие является любым из них, Результат условного выражения будет результатом выполнения выражения exprIfFalse .

Простой пример

  var age = 26;
var drink = (возраст> = 21)? «Пиво»: «Сок»;
console.log (напиток);
  

Обработка нулевых значений

Одним из распространенных способов использования является обработка значения, которое может быть null :

  let welcome = person => {
    пусть имя = человек? person.name: `незнакомец`
    return `Привет, $ {name}`
}

console.log (приветствие ({имя: `Алиса`}));
console.log (приветствие (ноль));
  

Условные цепочки

Тернарный оператор является правоассоциативным, что означает, что он может быть «сцеплен» в следующим образом, аналогично if… else if… else if… else цепочка:

  пример функции (…) {
    условие возврата1? значение1
         : condition2? значение2
         : condition3? значение3
         : значение4;
}



function example (…) {
    если (условие1) {возвращаемое значение1; }
    иначе, если (условие2) {возвращаемое значение2; }
    иначе, если (условие3) {возвращаемое значение3; }
    else {возвращаемое значение4; }
}
  

Таблицы BCD загружаются только в браузере

Условные выражения JavaScript: основы с примерами

Условные выражения JavaScript: основы с примерами | JavaScript.ком

Условные операторы управляют поведением в JavaScript и определяют, могут ли части кода выполняться.

В JavaScript существует несколько различных типов условных операторов, в том числе:

  • Операторы «Если»: если условие истинно, оно используется для указания выполнения блока кода.
  • Операторы «Else»: если то же условие ложно, оно указывает выполнение блока кода.
  • Операторы «Else if»: задают новый тест, если первое условие ложно.

Теперь, когда у вас есть основные определения условных операторов JavaScript, давайте покажем вам примеры каждого из них.

Как наиболее распространенный тип условных выражений, оператор if выполняется только в том случае, если условие, заключенное в круглые скобки (), является истинным.

ПРИМЕР
if (10> 5) {
var output = «if block»;
}

исход;
ВЫХОД
«если блок»

Вот что происходит в приведенном выше примере:

  • Ключевое слово if указывает JavaScript начать условный оператор.
  • (10> 5) — это условие для проверки, которое в данном случае истинно — 10 больше 5.
  • Часть, заключенная в фигурные скобки {}, является блоком кода для выполнения.
  • Поскольку условие выполняется, переменному результату присваивается значение «if block».

Вы можете расширить оператор if с помощью оператора else, который добавляет еще один блок для выполнения, когда условие if не выполняется.

ПРИМЕР
if («кошка» === «собака») {
var output = «if block»;
} else {
var output = «else block»;
}
исход;
ВЫХОД
«блок else»


В приведенном выше примере «кошка» и «собака» не равны, поэтому выполняется блок else, а результат переменной получает значение «блок else».

Пример оператора Else If

Вы также можете расширить оператор if с помощью оператора else if, который добавляет еще одно условие с собственным блоком.

ПРИМЕР
if (false) {
var output = «if block»;
} else if (истина) {
var output = «else if block»;
} else {
var output = «else block»;
}

исход;

ВЫХОД
«иначе, если блок»


Вы можете использовать несколько условных выражений if else, но обратите внимание, что выполняется только первый блок else if.JavaScript пропускает все оставшиеся условные выражения после выполнения первого из них.

ПРИМЕР
if (false) {
var output = «if block»;
} else if (true) {
var output = «первый блок, если еще»;
} else if (истина) {
var output = «второй блок else if»;
} else {
var output = «else block»;
}

исход;
ВЫХОД
«первый иначе, если блок»


Для работы оператору else if не требуется следующий оператор else.Если ни одно из условий if или else if не проходит, то JavaScript движется вперед и не запускает ни один из условных блоков кода.

ПРИМЕР
if (false) {
var output = «if block»;
} else if (ложь) {
var output = «else if block»;
}

исход;
ВЫХОД
«первый иначе, если блок»

С планом Pluralsight вы можете:

С помощью 14-дневного пилотного проекта вы можете:

  • Доступ к тысячам видеороликов для развития критических навыков
  • Предоставить до 10 пользователей доступ к тысячам видеокурсов
  • Практикуйте и применяйте навыки с помощью интерактивных курсов и проектов
  • Просматривайте данные о навыках, использовании и тенденциях для ваших команд
  • Подготовьтесь к сертификации с помощью ведущих в отрасли практических экзаменов
  • Измерение уровня владения навыками и ролями
  • Согласуйте обучение с вашими целями с помощью путей и каналов

С планом Pluralsight вы можете:

С помощью 14-дневного пилотного проекта вы можете:

  • Доступ к тысячам видеороликов для развития критических навыков
  • Предоставьте до 10 пользователей доступ к тысячам видеокурсов
  • Практикуйте и применяйте навыки с помощью интерактивных курсов и проектов
  • Просматривайте данные о навыках, использовании и тенденциях для ваших команд
  • Подготовьтесь к сертификации с помощью ведущих в отрасли практических экзаменов
  • Измерение уровня владения навыками и ролями
  • Согласуйте обучение с вашими целями с помощью путей и каналов

Мы используем файлы cookie, чтобы сделать взаимодействие с нашими веб-сайтами и услугами простым и значимым.Чтобы получить дополнительную информацию о файлах cookie, которые мы используем, или узнать, как отключить файлы cookie, щелкните здесь.

Вложенные операторы IF для JavaScript

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

Используя операторы if как с операторами сравнения, так и с логическими операторами, мы можем настроить код, который будет запускаться при соблюдении определенной комбинации условий.Мы не всегда хотим тестировать все условие, чтобы запустить один набор операторов, если весь тест верен, и другой, если он неверен. Мы можем выбрать между несколькими различными утверждениями, в зависимости от того, какая конкретная комбинация условий верна.

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

 
 var ответ; 
, если (a == b) {
  если (a == c) { 

answer = «все равны»;
} остальное {
answer = «a и b равны»;
}
} else {
, если (a == c) {
 answer = "a и c равны"; 
} else {
  если (b == c) { 

answer = «b и c равны»;
} остальное {
answer = «все разные»;
}
} 
} 

Вот как работает логика:

  1. Если первое условие истинно (
     if (a == b) 
    ), то программа проверяет наличие вложенного условия if (
     if (a == c) 
    ).Если первое условие ложно, программа переходит к условию else .
  2. Если вложено, если истинно, выполняется инструкция, т.е. «все равны».
  3. Если вложено, если ложно, то выполняется оператор else , т.е. «a и b равны».

Вот несколько вещей, на которые следует обратить внимание, как это закодировано:

  • Сначала мы создали переменную answer для хранения результата до того, как мы запустили оператор if , сделав переменную глобальной.Без этого нам пришлось бы включать переменную в начале всех операторов присваивания, поскольку это была бы локальная переменная.
  • Во-вторых, мы сделали отступ для каждого вложенного оператора if . Это позволяет нам легче отслеживать, сколько существует вложенных уровней операторов. Это также проясняет, что мы закрыли нужное количество блоков кода для завершения всех операторов if , которые мы открыли. Вы можете обнаружить, что проще сначала поставить фигурные скобки для каждого оператора if , прежде чем вы начнете писать код, который принадлежит этому блоку.

Мы можем немного упростить один из разделов этого кода, чтобы не вкладывать столько же операторов if . Если весь блок else состоит из одного оператора if , мы можем опустить фигурные скобки вокруг этого блока и переместить само условие if на ту же строку, что и else , используя «else if » условие. Например:

 
 var ответ; 
, если (a == b) {
, если (a == c) {
 answer = "все равны"; 
} else {
 answer = "a и b равны"; 
} 
}  иначе, если (a == c) { 

answer = «a и c равны»;
} иначе, если (b == c) {
answer = «b и c равны»;
} else {
 answer = "все разные"; 
} 

Вложенные операторы if / then распространены во всех языках программирования, а не только в JavaScript.Начинающие программисты часто используют несколько операторов if / then или if / else вместо того, чтобы вкладывать их друг в друга. Хотя такой код будет работать, он быстро станет подробным и будет дублировать условия. Вложенные условные операторы делают логику программы более ясной и приводят к сокращению кода, который может выполняться или компилироваться быстрее.

Использование && и || вне if-clause в JavaScript

Возможно, вы использовали && и || Операторы при записи условия в предложение if .Но знаете ли вы, что в JavaScript они оценивают значения выражений, такие как строки и числа, вместо логических значений true и false ?

Это позволяет использовать && и || Операторы в выражениях вне if -clause. Он предоставляет короткие способы выразить раннюю остановку с помощью && и выразить значение по умолчанию с помощью || .

If-clause оперирует правдивыми и ложными значениями

Тот факт, что && и || Операторы вычисляют строки, а числа не нарушают предложение if , потому что условия в JavaScript оцениваются по-разному.

Вместо предложения if , определяющего свой следующий ход на основании условия истинно или ложного , он принимает решение на основании условия истинно или ложного .

Определение:

Значение ложное , если оно ложное , null , undefined , '' , 0 или NaN . Правдивое значение — это любое значение, не считающееся ложным.

Давайте воспользуемся этой информацией.

Используйте && для защиты от неопределенных

Распространенной ситуацией является доступ к свойствам вложенных объектов с использованием точечной нотации. Например request.session.id . В этом случае, если какой-либо объект на пути undefined , выдается ошибка «Uncaught TypeError: Cannot read property of undefined».

Этой ошибки можно избежать, используя && для защиты от undefined.

  const sessionId = request.session && request.session.id;  

Здесь выражение оценивается как undefined безопасно без выдачи ошибки.

Определение для && :

Оператор && оценивает левостороннее выражение, если оно ложно, в противном случае — правое выражение.

Использование || для предоставления значения по умолчанию

Другой распространенный вариант использования — получение значения, и если оно не существует, используйте значение по умолчанию.

Этого можно достичь с помощью || -оператор.

  const name = user.name || «Гость»;  

Определение для || — это

|| -оператор вычисляет левое выражение, если оно истинно, в противном случае — правое выражение.

Читаемость

Эти два новых инструмента — хорошее дополнение к вашему набору инструментов. Но, как всегда, на первом месте стоит удобочитаемость. Используйте их с умом там, где они лучше всего подходят.Не забудьте убедиться, что все в вашей команде знают, как их использовать, например, передав им эту статью.

Узел не ждет завершения вызова базы данных?

Узнайте, как работают асинхронные вызовы, и заставьте ваше приложение работать так, как вы планировали. Получите краткий курс электронной почты по асинхронности и две главы из приложения Finish Your Node.

3 способа проверить, есть ли у объекта свойство в JavaScript

В этом посте вы прочитаете 3 распространенных способа проверки наличия свойства в объекте JavaScript.

1.

hasOwnProperty () метод

Каждый объект JavaScript имеет специальный метод object.hasOwnProperty ('myProp') , который возвращает логическое значение, указывающее, имеет ли объект свойство myProp .

В следующем примере hasOwnProperty () определяет наличие свойств name и realName :

  const hero = {
  имя: «Бэтмен»
};

hero.hasOwnProperty ('имя');
герой.hasOwnProperty ('настоящее имя');  

hero.hasOwnProperty ('name') возвращает true , потому что свойство name существует в объекте hero .

С другой стороны, hero не имеет свойства realName . Таким образом, hero.hasOwnProperty ('realName') возвращает false , что означает отсутствующее свойство.

Имя метода hasOwnProperty () предполагает, что он просматривает собственные свойства объекта.Собственные свойства определяются непосредственно для объекта.

Из-за этого hasOwnProperty () не обнаруживает унаследованное свойство toString :

  const hero = {
  имя: «Бэтмен»
};

hero.toString;

hero.hasOwnProperty ('toString');  

2.

в оператор

'myProp' в объекте также определяет, существует ли свойство myProp в объекте .

Давайте используем в операторе , чтобы обнаружить существование name и realName в hero object:

  const hero = {
  имя: «Бэтмен»
};

«имя» в герой;
'realName' в герое;  

'name' в hero оценивается как true , потому что hero имеет свойство name .

С другой стороны, 'realName' в hero оценивается как false , потому что hero не имеет свойства с именем 'realName' .

Оператор

in имеет короткий синтаксис, и я предпочитаю его методу hasOwnProperty () .

Основное различие между методом hasOwnProperty () и в операторе заключается в том, что последний проверяет в пределах собственные и унаследованные свойства объекта.

Вот почему, в отличие от hasOwnProperty () , оператор в обнаруживает, что объект hero содержит унаследованное свойство toString :

  const hero = {
  имя: «Бэтмен»
};

hero.toString;

toString в герое; hero.hasOwnProperty ('toString');  

3. Сравнение с

undefined

Доступ к несуществующему свойству из объекта приводит к undefined :

  const hero = {
  имя: «Бэтмен»
};

герой.название;
hero.realName;  

hero.realName оценивается как undefined , потому что свойство realName отсутствует.

Теперь вы можете увидеть идею: вы можете сравнить с undefined , чтобы определить наличие свойства.

  const hero = {
  имя: «Бэтмен»
};

hero.name! == undefined;
hero.realName! == undefined;  

hero.name! == undefined оценивается как true , что показывает наличие свойства.

С другой стороны, hero.realName! == undefined равно false , что указывает на то, что realName отсутствует.

Сравнение с undefined для определения наличия собственности — дешевый и грязный подход.

Но помните о ложноотрицаниях. Если свойство существует, но имеет значение undefined (случай, однако, случается редко), при сравнении с undefined неверно оценивается как false :

  const hero = {
  имя: undefined
};

герой.имя! == undefined;  

Даже если свойство name существует (но имеет значение undefined ), hero.name! == undefined оценивается как false : что неверно указывает на отсутствующее свойство.

4. Резюме

Есть в основном 3 способа проверить, существует ли собственность.

Первый способ — вызвать object.hasOwnProperty (propName) .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *