Ðногда нам нÑжно вÑполниÑÑ ÑазлиÑнÑе дейÑÑÐ²Ð¸Ñ Ð² завиÑимоÑÑи Ð¾Ñ ÑÑловий.
ÐÐ»Ñ ÑÑого Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ if и ÑÑловнÑй опеÑаÑÐ¾Ñ ?, коÑоÑÑй Ñакже назÑваÑÑ Ð¾Ð¿ÐµÑаÑоÑом «вопÑоÑиÑелÑнÑй знак».
ÐнÑÑÑÑкÑÐ¸Ñ Â«if»
ÐнÑÑÑÑкÑÐ¸Ñ if(...) вÑÑиÑлÑÐµÑ ÑÑловие в ÑкобкаÑ
и, еÑли ÑезÑлÑÑÐ°Ñ true, Ñо вÑполнÑÐµÑ Ð±Ð»Ð¾Ðº кода.
ÐапÑимеÑ:
let year = prompt('Ркаком Ð³Ð¾Ð´Ñ Ð±Ñла опÑбликована ÑпеÑиÑикаÑÐ¸Ñ ECMAScript-2015?', '');
if (year == 2015) alert( 'ÐÑ Ð¿ÑавÑ!' );
РпÑимеÑе вÑÑе, ÑÑловие â ÑÑо пÑоÑÑÐ°Ñ Ð¿ÑовеÑка на ÑавенÑÑво (year == 2015), но оно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ гоÑаздо более ÑложнÑм.
ÐÑли Ð¼Ñ Ñ Ð¾Ñим вÑполниÑÑ Ð±Ð¾Ð»ÐµÐµ одной инÑÑÑÑкÑии, Ñо нÑжно заклÑÑиÑÑ Ð±Ð»Ð¾Ðº кода в ÑигÑÑнÑе Ñкобки:
if (year == 2015) {
alert( "ÐÑавилÑно!" );
alert( "ÐÑ Ñакой ÑмнÑй!" );
}
ÐÑ ÑекомендÑем иÑполÑзоваÑÑ ÑигÑÑнÑе Ñкобки {} вÑегда, когда Ð²Ñ Ð¸ÑполÑзÑеÑе инÑÑÑÑкÑÐ¸Ñ if, даже еÑли вÑполнÑеÑÑÑ ÑолÑко одна команда. ÐÑо ÑлÑÑÑÐ°ÐµÑ ÑиÑаемоÑÑÑ ÐºÐ¾Ð´Ð°.
ÐÑеобÑазование к логиÑеÑÐºÐ¾Ð¼Ñ ÑипÑ
ÐнÑÑÑÑкÑÐ¸Ñ if (â¦) вÑÑиÑлÑÐµÑ Ð²ÑÑажение в ÑкобкаÑ
и пÑеобÑазÑÐµÑ ÑезÑлÑÑÐ°Ñ Ðº логиÑеÑÐºÐ¾Ð¼Ñ ÑипÑ.
ÐавайÑе вÑпомним пÑавила пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñипов из Ð³Ð»Ð°Ð²Ñ ÐÑеобÑазование Ñипов:
- ЧиÑло
0, пÑÑÑÐ°Ñ ÑÑÑока"",null,undefinedиNaNÑÑановÑÑÑÑfalse. Ðз-за ÑÑого Ð¸Ñ Ð½Ð°Ð·ÑваÑÑ Â«Ð»Ð¾Ð¶Ð½Ñми» («falsy») знаÑениÑми. - ÐÑÑалÑнÑе знаÑÐµÐ½Ð¸Ñ ÑÑановÑÑÑÑ
true, поÑÑÐ¾Ð¼Ñ Ð¸Ñ Ð½Ð°Ð·ÑваÑÑ Â«Ð¿ÑавдивÑми» («truthy»).
Таким обÑазом, код пÑи Ñаком ÑÑловии никогда не вÑполниÑÑÑ:
if (0) { // 0 is falsy
...
}
â¦Ð° пÑи Ñаком â вÑполниÑÑÑ Ð²Ñегда:
if (1) { // 1 is truthy
...
}
ÐÑ Ñакже можем пеÑедаÑÑ Ð·Ð°Ñанее вÑÑиÑленное в пеÑеменной логиÑеÑкое знаÑение в if, напÑÐ¸Ð¼ÐµÑ Ñак:
let condition = (year == 2015); // пÑеобÑазÑеÑÑÑ Ðº true или false
if (condition) {
...
}
Ðлок «else»
ÐнÑÑÑÑкÑÐ¸Ñ if Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑй блок «else» («инаÑе»). Ðн вÑполнÑеÑÑÑ, когда ÑÑловие ложно.
ÐапÑимеÑ:
let year = prompt('Ркаком Ð³Ð¾Ð´Ñ Ð±Ñла опÑбликована ÑпеÑиÑикаÑÐ¸Ñ ECMAScript-2015?', '');
if (year == 2015) {
alert( 'Ðа Ð²Ñ Ð·Ð½Ð°Ñок!' );
} else {
alert( 'Ð Ð²Ð¾Ñ Ð¸ непÑавилÑно!' ); // лÑбое знаÑение, кÑоме 2015
}
ÐеÑколÑко ÑÑловий: «else if»
Ðногда нÑжно пÑовеÑиÑÑ Ð½ÐµÑколÑко ваÑианÑов ÑÑловиÑ. ÐÐ»Ñ ÑÑого иÑполÑзÑеÑÑÑ Ð±Ð»Ð¾Ðº else if.
ÐапÑимеÑ:
let year = prompt('Ркаком Ð³Ð¾Ð´Ñ Ð±Ñла опÑбликована ÑпеÑиÑикаÑÐ¸Ñ ECMAScript-2015?', '');
if (year < 2015) {
alert( 'ÐÑо ÑлиÑком Ñано...' );
} else if (year > 2015) {
alert( 'ÐÑо поздноваÑо' );
} else {
alert( 'ÐеÑно!' );
}
РпÑиведÑнном вÑÑе коде JavaScript ÑнаÑала пÑовеÑÐ¸Ñ year < 2015. ÐÑли ÑÑо невеÑно, он пеÑеÑ
Ð¾Ð´Ð¸Ñ Ðº ÑледÑÑÑÐµÐ¼Ñ ÑÑÐ»Ð¾Ð²Ð¸Ñ year > 2015. ÐÑли оно Ñоже ложно, Ñогда ÑÑабоÑÐ°ÐµÑ Ð¿Ð¾Ñледний alert.
Ðлоков else if Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ болÑÑе. ÐÑиÑÑÑÑÑвие блока else не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм.
УÑловнÑй опеÑаÑÐ¾Ñ â?â
Ðногда нам нÑжно опÑеделиÑÑ Ð¿ÐµÑеменнÑÑ Ð² завиÑимоÑÑи Ð¾Ñ ÑÑловиÑ.
ÐапÑимеÑ:
let accessAllowed;
let age = prompt('СколÑко вам леÑ?', '');
if (age > 18) {
accessAllowed = true;
} else {
accessAllowed = false;
}
alert(accessAllowed);
Так назÑваемÑй «ÑÑловнÑй» опеÑаÑÐ¾Ñ Â«Ð²Ð¾Ð¿ÑоÑиÑелÑнÑй знак» позволÑÐµÑ Ð½Ð°Ð¼ ÑделаÑÑ ÑÑо более коÑоÑким и пÑоÑÑÑм ÑпоÑобом.
ÐпеÑаÑÐ¾Ñ Ð¿ÑедÑÑавлен знаком вопÑоÑа ?. Ðго Ñакже назÑваÑÑ Â«ÑеÑнаÑнÑй», Ñак как ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑоÑ, единÑÑвеннÑй в ÑвоÑм Ñоде, Ð¸Ð¼ÐµÐµÑ ÑÑи аÑгÑменÑа.
СинÑакÑиÑ:
let result = ÑÑловие ? знаÑение1 : знаÑение2;
СнаÑала вÑÑиÑлÑеÑÑÑ ÑÑловие: еÑли оно иÑÑинно, Ñогда возвÑаÑаеÑÑÑ Ð·Ð½Ð°Ñение1, в пÑоÑивном ÑлÑÑае â знаÑение2.
ÐапÑимеÑ:
let accessAllowed = (age > 18) ? true : false;
ТеÑ
ниÑеÑки, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ опÑÑÑиÑÑ ÐºÑÑглÑе Ñкобки вокÑÑг age > 18. ÐпеÑаÑÐ¾Ñ Ð²Ð¾Ð¿ÑоÑиÑелÑного знака Ð¸Ð¼ÐµÐµÑ Ð½Ð¸Ð·ÐºÐ¸Ð¹ пÑиоÑиÑеÑ, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ вÑполнÑеÑÑÑ Ð¿Ð¾Ñле ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ >.
ÐÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð±ÑÐ´ÐµÑ Ð´ÐµÐ»Ð°ÑÑ Ñо же Ñамое, ÑÑо и пÑедÑдÑÑий:
// опеÑаÑÐ¾Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ "age > 18" вÑполнÑеÑÑÑ Ð¿ÐµÑвÑм в лÑбом ÑлÑÑае
// (Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи заклÑÑаÑÑ ÐµÐ³Ð¾ в Ñкобки)
let accessAllowed = age > 18 ? true : false;
Ðо Ñкобки делаÑÑ ÐºÐ¾Ð´ более пÑоÑÑÑм Ð´Ð»Ñ Ð²Ð¾ÑпÑиÑÑиÑ, поÑÑÐ¾Ð¼Ñ Ð¼Ñ ÑекомендÑем Ð¸Ñ Ð¸ÑполÑзоваÑÑ.
РпÑимеÑе вÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе избежаÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа вопÑоÑиÑелÑного знака ?, Ñ.к. ÑÑавнение Ñамо по Ñебе Ñже возвÑаÑÐ°ÐµÑ true/false:
// Ñо же Ñамое
let accessAllowed = age > 18;
ÐеÑколÑко опеÑаÑоÑов â?â
ÐоÑледоваÑелÑноÑÑÑ Ð¾Ð¿ÐµÑаÑоÑов вопÑоÑиÑелÑного знака ? позволÑÐµÑ Ð²ÐµÑнÑÑÑ Ð·Ð½Ð°Ñение, коÑоÑое завиÑÐ¸Ñ Ð¾Ñ Ð±Ð¾Ð»ÐµÐµ Ñем одного ÑÑловиÑ.
ÐапÑимеÑ:
let age = prompt('ÐозÑаÑÑ?', 18);
let message = (age < 3) ? 'ÐдÑавÑÑвÑй, малÑÑ!' :
(age < 18) ? 'ÐÑивеÑ!' :
(age < 100) ? 'ÐдÑавÑÑвÑйÑе!' :
'Ðакой необÑÑнÑй возÑаÑÑ!';
alert( message );
ÐонаÑÐ°Ð»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñложно понÑÑÑ, ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ. Ðо пÑи ближайÑем ÑаÑÑмоÑÑении Ð¼Ñ Ð²Ð¸Ð´Ð¸Ð¼, ÑÑо ÑÑо обÑÑÐ½Ð°Ñ Ð¿Ð¾ÑледоваÑелÑÐ½Ð°Ñ Ð¿ÑовеÑка:
- ÐеÑвÑй знак вопÑоÑа пÑовеÑÑеÑ
age < 3. - ÐÑли веÑно â возвÑаÑаеÑ
'ÐдÑавÑÑвÑй, малÑÑ!'. РпÑоÑивном ÑлÑÑае, пÑовеÑÑÐµÑ Ð²ÑÑажение поÑле двоеÑоÑÐ¸Ñ â:â, вÑÑиÑлÑеÑage < 18. - ÐÑли ÑÑо веÑно â возвÑаÑаеÑ
'ÐÑивеÑ!'. РпÑоÑивном ÑлÑÑае, пÑовеÑÑÐµÑ Ð²ÑÑажение поÑле ÑледÑÑÑего двоеÑоÑÐ¸Ñ â:â, вÑÑиÑлÑеÑage < 100. - ÐÑли ÑÑо веÑно â возвÑаÑаеÑ
'ÐдÑавÑÑвÑйÑе!'. РпÑоÑивном ÑлÑÑае, возвÑаÑÐ°ÐµÑ Ð²ÑÑажение поÑле поÑледнего двоеÑоÑÐ¸Ñ â'Ðакой необÑÑнÑй возÑаÑÑ!'.
ÐÐ¾Ñ ÐºÐ°Ðº ÑÑо вÑглÑÐ´Ð¸Ñ Ð¿Ñи иÑполÑзовании if..else:
if (age < 3) {
message = 'ÐдÑавÑÑвÑй, малÑÑ!';
} else if (age < 18) {
message = 'ÐÑивеÑ!';
} else if (age < 100) {
message = 'ÐдÑавÑÑвÑйÑе!';
} else {
message = 'Ðакой необÑÑнÑй возÑаÑÑ!';
}
ÐеÑÑадиÑионное иÑполÑзование â?â
Ðногда опеÑаÑÐ¾Ñ Â«Ð²Ð¾Ð¿ÑоÑиÑелÑнÑй знак» ? иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве Ð·Ð°Ð¼ÐµÐ½Ñ if:
let company = prompt('ÐÐ°ÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ñоздала JavaScript?', '');
(company == 'Netscape') ?
alert('ÐеÑно!') : alert('ÐепÑавилÑно.');
РзавиÑимоÑÑи Ð¾Ñ ÑÑÐ»Ð¾Ð²Ð¸Ñ company == 'Netscape', бÑÐ´ÐµÑ Ð²Ñполнена либо пеÑваÑ, либо вÑоÑÐ°Ñ ÑаÑÑÑ Ð¿Ð¾Ñле ?.
ÐдеÑÑ Ð¼Ñ Ð½Ðµ пÑиÑваиваем ÑезÑлÑÑÐ°Ñ Ð¿ÐµÑеменной. ÐмеÑÑо ÑÑого Ð¼Ñ Ð²ÑполнÑем ÑазлиÑнÑй код в завиÑимоÑÑи Ð¾Ñ ÑÑловиÑ.
Ðе ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð²Ð¾Ð¿ÑоÑиÑелÑного знака Ñаким обÑазом.
ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÑÐ°ÐºÐ°Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÐºÐ¾ÑоÑе, Ñем ÑквиваленÑÐ½Ð°Ñ Ð¸Ð½ÑÑÑÑкÑÐ¸Ñ if, она Ñ
Ñже ÑиÑаеÑÑÑ.
ÐоÑ, Ð´Ð»Ñ ÑÑавнениÑ, ÑÐ¾Ñ Ð¶Ðµ код, иÑполÑзÑÑÑий if:
let company = prompt('ÐÐ°ÐºÐ°Ñ ÐºÐ¾Ð¼Ð¿Ð°Ð½Ð¸Ñ Ñоздала JavaScript?', '');
if (company == 'Netscape') {
alert('ÐеÑно!');
} else {
alert('ÐепÑавилÑно.');
}
ÐÑи ÑÑении глаза ÑканиÑÑÑÑ ÐºÐ¾Ð´ по веÑÑикали. Ðлоки кода, занимаÑÑие неÑколÑко ÑÑÑок, воÑпÑинимаÑÑÑÑ Ð³Ð¾Ñаздо легÑе, Ñем длиннÑй гоÑизонÑалÑнÑй Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑкÑий.
СмÑÑл опеÑаÑоÑа «вопÑоÑиÑелÑнÑй знак» ? â веÑнÑÑÑ Ñо или иное знаÑение, в завиÑимоÑÑи Ð¾Ñ ÑÑловиÑ. ÐожалÑйÑÑа, иÑполÑзÑйÑе его именно Ð´Ð»Ñ ÑÑого. Ðогда вам нÑжно вÑполниÑÑ ÑазнÑе веÑви кода â иÑполÑзÑйÑе if.
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)