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
синтаксис выглядит как pseudocode:
if (condition) { code to run if condition is true } else { run some other code instead }
Что мы имеем:
- Ключевое слово
if
расположено перед круглыми скобками. - Условие для проверки (condition), расположено внутри круглых скобок (например «это значение больше другого значения?», или «это значение существует?»). Это условие использует операторы сравнения (comparison operators), которые мы изучим позже, и возвратит нам
true
илиfalse
. - Внутри скобок { } расположен код, который будет выполняться только в том случае, если условие (condition) верно (
true)
. - Ключевое слово
else (иначе)
. - Ещё скобки { }, код внутри которых выполнится, только если условие не верно (не
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 = ''; } }
- Здесь у нас есть элемент HTML
<select>
который позволяет нам выбирать разные варианты погоды и простой абзац. - В JavaScript мы создаём ссылки на элементы
<select>
и<p>
и добавляем обработчик события элемента<select>
, чтобы при его изменении значения запускалась функцияsetWeather()
. - Когда функция будет запущена, первоначально мы определим значение переменной
choice
, которая равна выбранному значению в элементе<select>
. Затем мы используем условный оператор для отображения текста внутри абзаца в зависимости от того, какое значение у переменнойchoice
. Обратите внимание, как все условия проверяются вelse if() {...}
блоках, за исключением первого, который используетif() {...}
блок. - Последний выбор, внутри
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: а вообще-то, выполнить только этот код }
Что мы имеем:
- Ключевое слово
switch
, за которым следует пара круглых скобок. - В скобках приводится выражение или значение.
- Ключевое слово
case
, за которым следует вариант выбора (именно он проверяется на соответствие выражению или значению) и двоеточие. - Код, который будет выполняться, если вариант совпадает с выражением.
- Оператор
break
, за которым следует точка с запятой. Если вариант совпал с выражением или значением, браузер закончит выполнять блок кода, дойдя до оператораbreak
, и перейдёт к выполнению кода, расположенного после оператора switch. - Вариантов выбора (пункты 3–5) может быть любое количество.
- Ключевое слово
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
, сразу после комментария // ДОБАВЬТЕ СЮДА УСЛОВНОЕ ВЫРАЖЕНИЕ
. Конструкция должна:
- Проверить выбранный месяц (хранящийся в переменной
choice
. Это будет значение элемента<select>
после изменения значения, например, «Январь».) - Задать переменную, скажем,
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 = «все разные»;
}
}
}
Вот как работает логика:
- Если первое условие истинно (
if (a == b)
), то программа проверяет наличие вложенного условия if (if (a == c)
).Если первое условие ложно, программа переходит к условию else . - Если вложено, если истинно, выполняется инструкция, т.е. «все равны».
- Если вложено, если ложно, то выполняется оператор 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)
.