Page 40 - 6105
P. 40
isWeekend = true;
if (hour <10 || hour> 18 || isWeekend) {
alert ( 'Офіс до 10 або після 18 або у вихідний
закритий');
}
JavaScript обчислює кілька АБО зліва направо. При цьому, щоб економити
ресурси, використовується так званий «короткий цикл обчислення».
Припустимо, обчислюються кілька АБО поспіль: a || b || c || .... Якщо перший
аргумент - true, то результат свідомо буде true (хоча б одне зі значень - true), і
інші значення ігноруються. Це особливо помітно, коли вираз, переданий в якості
другого аргументу, має сторонній ефект - наприклад, привласнює змінну.
При запуску прикладу нижче привласнення x не відбудеться:
var x;
true || (X = 1);
alert (x); // undefined, x не присвоєно
А в прикладі нижче перший аргумент - false, так що АБО спробує
обчислити другий, запустивши тим самим присвоювання:
var x;
false || (X = 1);
alert (x); // 1
Отже, оператор АБО обчислює рівно стільки значень, скільки необхідно -
до першого true. При цьому оператор АБО повертає те значення, на якому
зупинилися обчислення. Причому, не перетворене до логічного типу.
Наприклад:
alert (1 || 0); // 1
alert (true || 'неважливо що'); // true
alert (null || 1); // 1
alert (undefined || 0); // 0
39