Ð JavaScript ÑÑнÑÑ ÑоÑиÑи логÑÑÐ½Ñ Ð¾Ð¿ÐµÑаÑоÑи: || (ÐÐÐ), && (Ð), ! (ÐÐ), ?? (опеÑаÑÐ¾Ñ null-обâÑднаннÑ). Ð ÑÑÐ¾Ð¼Ñ ÑоздÑÐ»Ñ Ð¼Ð¸ ÑозглÑнемо пеÑÑÑ ÑÑи опеÑаÑоÑи, а опеÑаÑÐ¾Ñ ?? â в наÑÑÑÐ¿Ð½Ð¾Ð¼Ñ ÑоздÑлÑ.
ХоÑа вони називаÑÑÑÑÑ âлогÑÑнимиâ, вони можÑÑÑ Ð±ÑÑи заÑÑоÑÐ¾Ð²Ð°Ð½Ñ Ð´Ð¾ знаÑÐµÐ½Ñ Ð±ÑдÑ-Ñкого ÑипÑ, не ÑÑлÑки бÑÐ»ÐµÐ²Ð¸Ñ . ÐÑ ÑезÑлÑÑаÑи Ñакож можÑÑÑ Ð±ÑÑи бÑдÑ-Ñкого ÑипÑ.
ÐодивимоÑÑ Ð±ÑлÑÑ Ð´ÐµÑалÑно.
|| (ÐÐÐ)
ÐпеÑаÑÐ¾Ñ âÐÐÐâ пÑедÑÑавлений двома Ñимволами веÑÑикалÑÐ½Ð¾Ñ Ð»ÑнÑÑ:
result = a || b;
У клаÑиÑÐ½Ð¾Ð¼Ñ Ð¿ÑогÑамÑÐ²Ð°Ð½Ð½Ñ Ð»Ð¾Ð³ÑÑний опеÑаÑÐ¾Ñ ÐÐРпÑизнаÑений Ð´Ð»Ñ Ð¼Ð°Ð½ÑпÑлÑÐ²Ð°Ð½Ð½Ñ Ð»Ð¸Ñе бÑлевими знаÑеннÑми. ЯкÑо бÑдÑ-Ñкий з його аÑгÑменÑÑв ознаÑÐ°Ñ true, повеÑÑаÑÑÑÑÑ true, ÑнакÑе повеÑÑаÑÑÑÑÑ false.
У JavaScript Ñей опеÑаÑÐ¾Ñ ÑкладнÑÑий Ñ Ð¿Ð¾ÑÑжнÑÑий. Ðле ÑпоÑаÑÐºÑ Ð¿Ð¾Ð´Ð¸Ð²Ð¸Ð¼Ð¾ÑÑ, Ñо вÑдбÑваÑÑÑÑÑ Ð· бÑлевими знаÑеннÑми.
Ð ÑоÑиÑи Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ Ð»Ð¾Ð³ÑÑÐ½Ñ ÐºÐ¾Ð¼Ð±ÑнаÑÑÑ:
alert( true || true ); // true
alert( false || true ); // true
alert( true || false ); // true
alert( false || false ); // false
Як баÑимо, ÑезÑлÑÑÐ°Ñ Ð·Ð°Ð²Ð¶Ð´Ð¸ true, за винÑÑком випадкÑ, коли обидва опеÑанди false.
ЯкÑо опеÑанд не Ñ Ð±Ñлевим, вÑн пеÑеÑвоÑÑÑÑÑÑÑ Ð½Ð° бÑлевий Ð´Ð»Ñ Ð¾Ð±ÑиÑленнÑ.
ÐапÑиклад, ÑиÑло 1 ÑозглÑдаÑÑÑÑÑ Ñк true, ÑиÑло 0 â Ñк false:
if (1 || 0) { // пÑаÑÑÑ Ñак Ñамо, Ñк ( true || false )
alert( 'пÑавдиво!' );
}
У бÑлÑÑоÑÑÑ Ð²Ð¸Ð¿Ð°Ð´ÐºÑв ÐÐÐ || викоÑиÑÑовÑÑÑÑÑÑ Ð² ÑнÑÑÑÑкÑÑÑÑ
if, Ñоб пеÑевÑÑиÑи, Ñи Ñ Ð±ÑдÑ-Ñка Ñз заданиÑ
Ñмов true.
ÐапÑиклад:
let hour = 9;
if (hour < 10 || hour > 18) {
alert( 'ÐÑÑÑ Ð·Ð°Ñинений.' );
}
Ðи можемо пеÑедаваÑи бÑлÑÑе Ñмов:
let hour = 12;
let isWeekend = true;
if (hour < 10 || hour > 18 || isWeekend) {
alert( 'ÐÑÑÑ Ð·Ð°Ñинений.' ); // Ñе виÑ
ÑднÑ
}
ÐÐÐ "||" Ð·Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑ Ð¿ÐµÑÑе пÑавдиве знаÑеннÑ
ÐпиÑана виÑе логÑка деÑо клаÑиÑна. Ð¢ÐµÐ¿ÐµÑ Ð²Ð²ÐµÐ´Ñмо âдодаÑковÑâ оÑобливоÑÑÑ JavaScript.
РозÑиÑений алгоÑиÑм пÑаÑÑÑ Ð½Ð°ÑÑÑпним Ñином.
Ðано кÑлÑка знаÑенÑ, ÑоздÑÐ»ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑом ÐÐÐ:
result = value1 || value2 || value3;
ÐпеÑаÑÐ¾Ñ ÐÐÐ || ÑобиÑÑ Ð½Ð°ÑÑÑпне:
- ÐбÑиÑлÑÑ Ð¾Ð¿ÐµÑанди злÑва напÑаво.
- ÐеÑеÑвоÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ опеÑанда на бÑлеве. ЯкÑо ÑезÑлÑÑаÑ
true, зÑпинÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð²ÐµÑÑÐ°Ñ Ð¿Ð¾ÑаÑкове знаÑÐµÐ½Ð½Ñ ÑÑого опеÑанда. - ЯкÑо вÑÑ Ð¾Ð¿ÐµÑанди бÑли обÑиÑÐ»ÐµÐ½Ð½Ñ (ÑобÑо ÑÑÑ Ð±Ñли
false), повеÑÑÐ°Ñ Ð¾ÑÑаннÑй опеÑанд.
ÐнаÑÐµÐ½Ð½Ñ Ð¿Ð¾Ð²ÐµÑÑаÑÑÑÑÑ Ñ Ð¿ÐµÑвÑÑÐ½Ð¾Ð¼Ñ Ð²Ð¸Ð³Ð»ÑÐ´Ñ Ð±ÐµÐ· конвеÑÑаÑÑÑ.
ÐнÑими Ñловами, ланÑÑжок з ÐÐÐ || повеÑÑÐ°Ñ Ð¿ÐµÑÑе пÑавдиве знаÑÐµÐ½Ð½Ñ Ð°Ð±Ð¾ оÑÑаннÑ, ÑкÑо пÑавдивого знаÑÐµÐ½Ð½Ñ Ð½Ðµ знайдено.
ÐапÑиклад:
alert( 1 || 0 ); // 1 (1 Ñ Ð¿Ñавдивим)
alert( null || 1 ); // 1 (1 Ñ Ð¿ÐµÑÑим пÑавдивим знаÑеннÑм)
alert( null || 0 || 1 ); // 1 (пеÑÑе пÑавдиве знаÑеннÑ)
alert( undefined || null || 0 ); // 0 (ÑÑÑ Ñ
ибнÑ, повеÑÑаÑÑÑÑÑ Ð¾ÑÑÐ°Ð½Ð½Ñ Ð·Ð½Ð°ÑеннÑ)
Це пÑизводиÑÑ Ð´Ð¾ ÑÑкавого викоÑиÑÑаннÑ, Ñ Ð¿Ð¾ÑÑвнÑÐ½Ð½Ñ Ð· âÑиÑÑим, клаÑиÑним, виклÑÑно-бÑлевим ÐÐÐâ.
-
ÐÑÑÐ¸Ð¼Ð°Ð½Ð½Ñ Ð¿ÐµÑÑого ÑÑÑинного знаÑÐµÐ½Ð½Ñ Ð·Ñ ÑпиÑÐºÑ Ð·Ð¼ÑÐ½Ð½Ð¸Ñ Ð°Ð±Ð¾ виÑазÑв.
ÐапÑиклад, маÑмо змÑннÑ
firstName,lastNameÑаnickName, ÑÑÑ Ð½ÐµÐ¾Ð±Ð¾Ð²âÑÐ·ÐºÐ¾Ð²Ñ (ÑобÑо вони можÑÑÑ Ð±ÑÑи невизнаÑеними або маÑи Ñ Ð¸Ð±Ð½Ñ Ð·Ð½Ð°ÑеннÑ).ÐикоÑиÑÑаÑмо ÐÐÐ
||, Ñоб вибÑаÑи ÑÑ Ð·Ð¼ÑннÑ, Ñка Ð¼Ð°Ñ Ð´Ð°Ð½Ñ, Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÐ¼Ð¾ ÑÑ (або ÑÑдок"ÐнонÑм", ÑкÑо жодна змÑнна не Ð¼Ð°Ñ Ð´Ð°Ð½Ð¸Ñ ):let firstName = ""; let lastName = ""; let nickName = "СÑпеÑÐодеÑ"; alert( firstName || lastName || nickName || "ÐнонÑм"); // СÑпеÑÐодеÑЯкÑо вÑÑ Ð·Ð¼ÑÐ½Ð½Ñ Ð¼Ð°Ð»Ð¸ б поÑÐ¾Ð¶Ð½Ñ ÑÑдки, ÑÐ¾Ð´Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð»Ð¾ÑÑ Ñлово
"ÐнонÑм". -
ÐбÑиÑÐ»ÐµÐ½Ð½Ñ ÐºÐ¾ÑоÑкого замиканнÑ.
ÐнÑÐ¾Ñ Ð¾ÑобливÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа ÐÐÐ
||Ñ Ñак зване âобÑиÑÐ»ÐµÐ½Ð½Ñ ÐºÐ¾ÑоÑкого замиканнÑâ.Це ознаÑаÑ, Ñо опеÑаÑоÑ
||опÑаÑÑовÑÑ Ð°ÑгÑменÑи доÑи, доки не доÑÑгаÑÑÑÑÑ Ð¿ÐµÑÑе пÑавдиве знаÑеннÑ, пÑÑÐ»Ñ Ñого Ñе знаÑÐµÐ½Ð½Ñ Ð½ÐµÐ³Ð°Ð¹Ð½Ð¾ повеÑÑаÑÑÑÑÑ, без подалÑÑого опÑаÑÑÐ²Ð°Ð½Ð½Ñ ÑеÑÑи аÑгÑменÑÑв.ÐажливÑÑÑÑ ÑÐ°ÐºÐ¾Ñ Ð¾ÑобливоÑÑÑ ÑÑÐ°Ñ Ð¾ÑевидноÑ, ÑкÑо опеÑанд Ñ Ð½Ðµ пÑоÑÑо змÑнноÑ, а виÑазом Ñз побÑÑним еÑекÑом, Ñк-Ð¾Ñ Ð¿ÑиÑвоÑÐ½Ð½Ñ Ð·Ð¼ÑÐ½Ð½Ð¾Ñ Ð°Ð±Ð¾ виклик ÑÑнкÑÑÑ.
У Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ñе пÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð²Ð¸Ð²ÐµÐ´ÐµÑÑÑÑ Ð»Ð¸Ñе дÑÑге повÑдомленнÑ:
true || alert("не виведеÑÑÑÑ"); false || alert("виведеÑÑÑÑ");РпеÑÑÐ¾Ð¼Ñ ÑÑÐ´ÐºÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÐÐÐ
||зÑпинÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²ÑдÑÐ°Ð·Ñ Ð¿ÑÑÐ»Ñ Ñого, Ñк âпобаÑиÑÑâ Ñо лÑвий виÑаз Ñtrue, Ñожalertне виконаÑÑÑÑÑ.Ðеколи ÑÐ°ÐºÑ ÐºÐ¾Ð½ÑÑÑÑкÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑ, Ñоб виконÑваÑи команди лиÑе пÑи Ñ Ð¸Ð±Ð½Ð¾ÑÑÑ Ñмови лÑвоÑÑÑ Ð²Ñд опеÑаÑоÑа.
&& (Ð)
ÐпеÑаÑÐ¾Ñ Ð Ð¿ÑедÑÑавлений двома ампеÑÑандами &&:
result = a && b;
У клаÑиÑÐ½Ð¾Ð¼Ñ Ð¿ÑогÑамÑÐ²Ð°Ð½Ð½Ñ Ð Ð¿Ð¾Ð²ÐµÑÑÐ°Ñ true, ÑкÑо обидва опеÑаÑоÑи Ñ Ð¿Ñавдивими, Ñ false в ÑнÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ:
alert( true && true ); // true
alert( false && true ); // false
alert( true && false ); // false
alert( false && false ); // false
ÐÑиклад з if:
let hour = 12;
let minute = 30;
if (hour == 12 && minute == 30) {
alert( 'ЧаÑ: 12:30' );
}
Так Ñамо Ñк з ÐÐÐ, бÑдÑ-Ñке знаÑÐµÐ½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¾ Ñк опеÑанд Ð:
if (1 && 0) { // обÑиÑлÑÑÑÑÑÑ Ñк true && false
alert( "не бÑде пÑаÑÑваÑи, ÑÐ¾Ð¼Ñ Ñо ÑезÑлÑÑÐ°Ñ Ñ
ибний" );
}
Ð â&&â ÑÑÐºÐ°Ñ Ð¿ÐµÑÑе Ñ Ð¸Ð±Ð½Ðµ знаÑеннÑ
Ðано декÑлÑка знаÑенÑ, обâÑÐ´Ð½Ð°Ð½Ð¸Ñ ÐºÑлÑкома Ð:
result = value1 && value2 && value3;
ÐпеÑаÑÐ¾Ñ Ð && ÑобиÑÑ Ð½Ð°ÑÑÑпне:
- ÐбÑиÑлÑÑ Ð¾Ð¿ÐµÑанди злÑва напÑаво.
- ÐеÑеÑвоÑÑÑ ÐºÐ¾Ð¶ÐµÐ½ опеÑанд на бÑлевий. ЯкÑо ÑезÑлÑÑаÑ
false, зÑпинÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð²ÐµÑÑÐ°Ñ Ð¾ÑигÑналÑне знаÑÐµÐ½Ð½Ñ Ñого опеÑанда. - ЯкÑо вÑÑ Ð¾Ð¿ÐµÑанди бÑли обÑиÑÐ»ÐµÐ½Ð½Ñ (ÑобÑо ÑÑÑ Ð±Ñли пÑавдивÑ), повеÑÑÐ°Ñ Ð¾ÑÑаннÑй опеÑанд.
ÐнÑими Ñловами, РповеÑÑÐ°Ñ Ð¿ÐµÑÑе Ñ Ð¸Ð±Ð½Ðµ знаÑеннÑ, або оÑÑÐ°Ð½Ð½Ñ Ð·Ð½Ð°ÑеннÑ, ÑкÑо жодного Ñ Ð¸Ð±Ð½Ð¾Ð³Ð¾ не бÑло знайдено.
ÐÑавила, Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ Ð²Ð¸Ñе, подÑÐ±Ð½Ñ Ð´Ð¾ пÑавил ÐÐÐ. Ð ÑзниÑÑ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо РповеÑÑÐ°Ñ Ð¿ÐµÑÑе Ñ Ð¸Ð±Ð½Ðµ знаÑеннÑ, ÑÐ¾Ð´Ñ Ñк ÐÐРповеÑÑÐ°Ñ Ð¿ÐµÑÑе пÑавдиве.
ÐÑиклади:
// ÑкÑо пеÑÑий опеÑанд пÑавдивий,
// РповеÑÑÐ°Ñ Ð´ÑÑгий опеÑанд:
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// ÑкÑо пеÑÑий опеÑанд Ñ
ибний,
// РповеÑÑÐ°Ñ Ñаме його. ÐÑÑгий опеÑанд ÑгноÑÑÑÑÑÑÑ
alert( null && 5 ); // null
alert( 0 && "неважливо" ); // 0
Ðи Ñакож можемо пеÑедаваÑи декÑлÑка знаÑÐµÐ½Ñ Ð¿Ð¾ÑпÑлÑ. ÐодивÑÑÑÑÑ, Ñк повеÑÑаÑÑÑÑÑ Ð¿ÐµÑÑе Ñ Ð¸Ð±Ð½Ðµ:
alert( 1 && 2 && null && 3 ); // null
Ðоли вÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ñ Ð¿Ñавдивими, повеÑÑаÑÑÑÑÑ Ð¾ÑÑÐ°Ð½Ð½Ñ Ð·Ð½Ð°ÑеннÑ:
alert( 1 && 2 && 3 ); // 3, оÑÑаннÑ
&& виÑе за ÐÐÐ ||ÐпеÑаÑÐ¾Ñ Ð && Ð¼Ð°Ñ Ð²Ð¸Ñий пÑÑоÑиÑÐµÑ Ð·Ð° ÐÐÐ ||.
ÐÑже, код a && b || c && d по ÑÑÑÑ Ñ Ñаким Ñамим, Ñк код з виÑазами && Ñ Ð´ÑжкаÑ
: (a && b) || (c && d).
if на || Ñи &&Ðеколи опеÑаÑÐ¾Ñ Ð && викоÑиÑÑовÑÑÑÑ Ñк âÑкоÑоÑений ваÑÑÐ°Ð½Ñ ifâ.
ÐапÑиклад:
let x = 1;
(x > 0) && alert( 'ÐÑлÑÑе за нÑлÑ!' );
ÐÑÑ Ñ Ð¿ÑавÑй ÑаÑÑÐ¸Ð½Ñ && бÑде виконÑваÑиÑÑ, ÑÑлÑки ÑкÑо обÑиÑÐ»ÐµÐ½Ð½Ñ Ð´Ñйде до неÑ. ТобÑо ÑÑлÑки ÑкÑо (x > 0) Ñ ÑÑÑинним.
ТомÑ, влаÑне, ми маÑмо аналог длÑ:
let x = 1;
if (x > 0) alert( 'ÐÑлÑÑе за нÑлÑ!' );
ХоÑа ваÑÑÐ°Ð½Ñ Ð· && видаÑÑÑÑÑ ÐºÐ¾ÑоÑÑим, конÑÑÑÑкÑÑÑ Ð· if Ñ Ð±ÑлÑÑ Ð¾ÑÐµÐ²Ð¸Ð´Ð½Ð¾Ñ Ñ Ð·Ð°Ð·Ð²Ð¸Ñай бÑлÑÑ ÑиÑабелÑноÑ. Ð¢Ð¾Ð¼Ñ Ð¼Ð¸ ÑекомендÑÑмо викоÑиÑÑовÑваÑи ÐºÐ¾Ð¶Ð½Ñ ÐºÐ¾Ð½ÑÑÑÑкÑÑÑ Ð·Ð° ÑвоÑм пÑизнаÑеннÑм: викоÑиÑÑовÑÑмо if, ÑкÑо нам поÑÑÑбна ÑнÑÑÑÑкÑÑÑ if, Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑмо &&, ÑкÑо нам поÑÑÑбен опеÑаÑÐ¾Ñ Ð.
! (ÐÐ)
ÐÑлевий опеÑаÑÐ¾Ñ ÐРпÑедÑÑавлений знаком Ð¾ÐºÐ»Ð¸ÐºÑ !.
СинÑакÑÐ¸Ñ Ð´Ñже пÑоÑÑий:
result = !value;
ÐпеÑаÑÐ¾Ñ Ð¿ÑÐ¸Ð¹Ð¼Ð°Ñ Ð¾Ð´Ð¸Ð½ аÑгÑÐ¼ÐµÐ½Ñ Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑ Ð½Ð°ÑÑÑпне:
- ÐеÑеÑвоÑÑÑ Ð¾Ð¿ÐµÑанд на бÑлевий Ñип:
true/false. - ÐовеÑÑÐ°Ñ Ð·Ð²Ð¾ÑоÑне знаÑеннÑ.
ÐапÑиклад:
alert( !true ); // false
alert( !0 ); // true
ÐодвÑйний ÐÐ !! ÑÐ½Ð¾Ð´Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑеÑвоÑÐµÐ½Ð½Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð½Ð° бÑлевий Ñип:
alert( !!"не пÑÑÑий ÑÑдок" ); // true
alert( !!null ); // false
ТобÑо, пеÑÑий ÐРпеÑеÑвоÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð½Ð° бÑлеве Ñ Ð¿Ð¾Ð²ÐµÑÑÐ°Ñ Ð·Ð²Ð¾ÑоÑне, а дÑÑгий ÐÐ ÑнвеÑÑÑÑ Ð¹Ð¾Ð³Ð¾ зновÑ. ÐÑеÑÑÐ¾Ñ Ð¼Ð¸ маÑмо пÑоÑÑе пеÑеÑвоÑÐµÐ½Ð½Ñ Ð·Ð½Ð°ÑÐµÐ½Ñ Ð½Ð° бÑлевий Ñип.
Ð ÑÑоÑ
и довÑий ÑпоÑÑб зÑобиÑи Ñе ж Ñаме â вбÑдована ÑÑнкÑÑÑ Boolean:
alert( Boolean("не пÑÑÑий ÑÑдок") ); // true
alert( Boolean(null) ); // false
ÐÑÑоÑиÑÐµÑ ÐÐ ! Ñ Ð½Ð°Ð¹Ð²Ð¸Ñим ÑеÑед ÑÑÑÑ
логÑÑниÑ
опеÑаÑоÑÑв, ÑÐ¾Ð¼Ñ Ð²Ñн завжди виконÑÑÑÑÑÑ Ð¿ÐµÑÑим, пеÑед && або ||.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)