ÐогиÑеÑкое ÐÐÐ (||)
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
ÐогиÑеÑкий опеÑаÑÐ¾Ñ ÐÐÐ (||) (дизÑÑнкÑиÑ) Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñа опеÑандов иÑÑинен бÑÐ´ÐµÑ true ÑолÑко в ÑлÑÑае, еÑли один или неÑколÑко его опеÑандов имеÑÑ Ð·Ð½Ð°Ñение true.
ÐбÑÑно иÑполÑзÑеÑÑÑ Ñ Ð±ÑлевÑми (логиÑеÑкими) знаÑениÑми. Тогда возвÑаÑаеÑÑÑ Ð±Ñлевое знаÑение. Ðднако ÑакÑиÑеÑки опеÑаÑÐ¾Ñ || возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение одного из опеÑандов, поÑÑÐ¾Ð¼Ñ ÐµÑли ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð¸ÑполÑзÑеÑÑÑ Ñ Ð½ÐµÐ±ÑлевÑми знаÑениÑми, он веÑÐ½ÐµÑ Ð½ÐµÐ±Ñлевое знаÑение.
ÐнÑеÑакÑивнÑй пÑимеÑ
const a = 3;
const b = -2;
console.log(a > 0 || b > 0);
// Expected output: true
СинÑакÑиÑ
expr1 || expr2;
ÐпиÑание
ÐÑли expr1 Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазовано в true, Ñо веÑнÑÑÑÑ expr1; в пÑоÑивном ÑлÑÑае возвÑаÑаеÑÑÑ expr2.
ÐÑли знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазовано в true, Ñо оно ÑаÑÑмаÑÑиваеÑÑÑ ÐºÐ°Ðº иÑÑиноподобное (truthy). ÐÑли же знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазовано в false, Ñо оно назÑваеÑÑÑ Ð»Ð¾Ð¶Ð½Ð¾Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñм (falsy).
ÐÑимеÑÑ Ð²ÑÑажений, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² false:
null;NaN;0;- пÑÑÑÐ°Ñ ÑÑÑока (
"",'',``); undefined.
ÐеÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо опеÑаÑÐ¾Ñ || Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ñ Ð¾Ð¿ÐµÑандами без логиÑеÑкиÑ
знаÑений, ÑÑо вÑÑ Ñавно бÑлевÑй опеÑаÑоÑ, поÑколÑÐºÑ ÐµÐ³Ð¾ возвÑаÑаемое знаÑение вÑегда можно пÑеобÑазоваÑÑ Ð² бÑлевÑй пÑимиÑив.
ЧÑÐ¾Ð±Ñ Ñвно пÑеобÑазоваÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемое знаÑение ÑÑого опеÑаÑоÑа (или вообÑе лÑбое вÑÑажение) в ÑооÑвеÑÑÑвÑÑÑее знаÑение бÑлевого Ñипа, иÑполÑзÑйÑе двойной опеÑаÑÐ¾Ñ ÐРили конÑÑÑÑкÑÐ¾Ñ Boolean.
СокÑаÑÑнное вÑÑиÑление
ÐпеÑаÑÐ¾Ñ Ð»Ð¾Ð³Ð¸ÑеÑкого ÐÐРвÑÑиÑлÑеÑÑÑ Ñлева напÑаво, Ð´ÐµÐ»Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм ÑокÑаÑÑнное вÑÑиÑление вÑÑажениÑ, ÑоглаÑно ÑледÑÑÑÐµÐ¼Ñ Ð¿ÑавилÑ:
(иÑÑинноподобное вÑÑажение) || ÑледÑÑÑее вÑÑажение â вÑÑиÑление оÑÑанавливаеÑÑÑ Ð½Ð° иÑÑинноподобном вÑÑажении;
СокÑаÑенное вÑÑиÑление Ñ
оÑоÑо Ñем, ÑÑо ÑледÑÑÑее вÑÑажение не бÑÐ´ÐµÑ Ð²ÑÑиÑлено, Ñ.е. вÑÑ, ÑвÑзанное Ñ Ð½Ð¸Ð¼, бÑÐ´ÐµÑ Ð¿ÑоигноÑиÑовано (напÑимеÑ, еÑли
ÑледÑÑÑее вÑÑажение пÑедÑÑавлÑÐµÑ Ñобой вÑзов ÑÑнкÑии, Ñо он никогда не пÑоизойдÑÑ). ÐÑÑ Ð¿Ð¾ÑомÑ, ÑÑо знаÑение опеÑаÑоÑа извеÑÑно Ñже поÑле вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð¿ÐµÑвого опеÑанда. ÐоÑмоÑÑиÑе на пÑимеÑ:
function A() {
console.log("вÑзвана ÑÑнкÑÐ¸Ñ A");
return false;
}
function B() {
console.log("вÑзвана ÑÑнкÑÐ¸Ñ B");
return true;
}
console.log(B() || A());
// Ð ÑезÑлÑÑаÑе вÑзова ÑÑнкÑии B, в конÑоли бÑÐ´ÐµÑ Ð²Ñведено "вÑзвана ÑÑнкÑÐ¸Ñ B",
// а далее в конÑоли поÑвиÑÑÑ false (ÑÑо ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑа)
ÐÑиоÑиÑÐµÑ Ð¾Ð¿ÐµÑаÑоÑов
СледÑÑÑие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ ÑквиваленÑнÑми, но ÑÑо не Ñак, поÑÐ¾Ð¼Ñ ÑÑо опеÑаÑÐ¾Ñ && вÑполнÑеÑÑÑ Ð´Ð¾ опеÑаÑоÑа || (Ñм. пÑиоÑиÑÐµÑ Ð¾Ð¿ÐµÑаÑоÑов).
true || (false && false); // веÑнÑÑ true, поÑколÑÐºÑ ÑнаÑала вÑÑиÑлÑеÑÑÑ &&
(true || false) && false; // веÑнÑÑ false, поÑколÑÐºÑ Ñ Ð³ÑÑппиÑовки вÑÑе пÑиоÑиÑеÑ
ÐÑимеÑÑ
>ÐÑполÑзование опеÑаÑоÑа ÐÐÐ
Ð ÑледÑÑÑем коде Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¿ÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа || (логиÑеÑкое ÐÐÐ).
o1 = true || true; // t || t веÑнÑÑ true
o2 = false || true; // f || t веÑнÑÑ true
o3 = true || false; // t || f веÑнÑÑ true
o4 = false || 3 == 4; // f || f веÑнÑÑ false
o5 = "Cat" || "Dog"; // t || t веÑнÑÑ "Cat"
o6 = false || "Cat"; // f || t веÑнÑÑ "Cat"
o7 = "Cat" || false; // t || f веÑнÑÑ "Cat"
o8 = "" || false; // f || f веÑнÑÑ false
o9 = false || ""; // f || f веÑнÑÑ ""
o10 = false || varObject; // f || object веÑнÑÑ varObject
ÐÑимеÑание:
ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑоÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑой пеÑеменной, имейÑе в видÑ, ÑÑо лÑбое ложноподобное бÑÐ´ÐµÑ Ð¿ÑоигноÑиÑовано. ÐÑли вам нÑжно иÑклÑÑиÑÑ ÑолÑко null или undefined, попÑобÑйÑе воÑполÑзоваÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑом нÑлевого ÑлиÑниÑ.
ÐÑавила конвеÑÑаÑии Ð´Ð»Ñ Ð±ÑлевÑÑ Ð·Ð½Ð°Ñений
ÐонвеÑÑаÑÐ¸Ñ Ð Ð² ÐÐÐ
СледÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ Ð±ÑлевÑми знаÑениÑми:
bCondition1 && bCondition2;
вÑегда ÑквиваленÑна:
!(!bCondition1 || !bCondition2);
ÐонвеÑÑаÑÐ¸Ñ ÐÐРв Ð
СледÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ Ð±ÑлевÑми знаÑениÑми:
bCondition1 || bCondition2;
вÑегда ÑквиваленÑна:
!(!bCondition1 && !bCondition2);
Удаление вложеннÑÑ ÐºÑÑглÑÑ Ñкобок
ÐоÑколÑÐºÑ Ð»Ð¾Ð³Ð¸ÑеÑкие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑÑиÑлÑÑÑÑÑ Ñлева напÑаво, вÑегда можно ÑдалиÑÑ ÐºÑÑглÑе Ñкобки из Ñложного вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñи ÑÑловии ÑоблÑÐ´ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделеннÑÑ Ð¿Ñавил.
СледÑÑÑÐ°Ñ ÑоÑÑÐ°Ð²Ð½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ Ð±ÑлевÑми знаÑениÑми:
bCondition1 && (bCondition2 || bCondition3);
вÑегда ÑквиваленÑна:
!(!bCondition1 || (!bCondition2 && !bCondition3));
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification > # prod-LogicalORExpression > |