From 39fd6956850537a05f8030f33929d944440c991d Mon Sep 17 00:00:00 2001 From: Vse Mozhe Buty Date: Sun, 20 Sep 2020 14:32:57 +0300 Subject: [PATCH 1/2] Address some possible issues in 1.2.11 --- .../2-alert-or/solution.md | 6 +- .../3-alert-1-null-2/solution.md | 2 +- .../4-alert-and/solution.md | 2 +- .../11-logical-operators/4-alert-and/task.md | 2 +- .../6-check-if-in-range/task.md | 2 +- .../7-check-if-out-range/task.md | 6 +- .../8-if-question/solution.md | 4 +- .../8-if-question/task.md | 4 +- .../9-check-login/ifelse_task.svg | 2 +- .../9-check-login/solution.md | 12 +-- .../9-check-login/task.md | 8 +- .../11-logical-operators/article.md | 76 +++++++++---------- 12 files changed, 63 insertions(+), 63 deletions(-) diff --git a/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md b/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md index b498fd001..9d442cc27 100644 --- a/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md +++ b/1-js/02-first-steps/11-logical-operators/2-alert-or/solution.md @@ -6,8 +6,8 @@ alert( alert(1) || 2 || alert(3) ); Виклик `alert` не повертає значення. Або, іншими словами, повертає `undefined`. -1. Перший АБО `||` обчислює його лівий операнд `alert(1)`. Це показує перше повідомлення з `1`. +1. Перший АБО `||` обчислює свій лівий операнд `alert(1)`. Це показує перше повідомлення з `1`. 2. `alert` повертає `undefined`, тому АБО переходить до другого операнда, шукаючи правдиве значення. -3. Другий операнд `2` є правдивим, тому виконання зупинено, повернуто `2` і потім показано зовнішнім alert. +3. Другий операнд `2` є правдивим, тому виконання зупинено, повернуто `2` і потім показано зовнішнім `alert`. -Не буде `3`, тому що обчислення на досягає `alert(3)`. +`3` не буде виведене, тому що обчислення не досягає `alert(3)`. diff --git a/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md b/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md index 5585844ae..03f91d329 100644 --- a/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md +++ b/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/solution.md @@ -1,4 +1,4 @@ -Відповідь: `null`, тому що це перше не правдиве значення зі списку. +Відповідь: `null`, тому що це перше хибне значення зі списку. ```js run alert( 1 && null && 2 ); diff --git a/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md b/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md index 4e42b67c2..74049ab02 100644 --- a/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md +++ b/1-js/02-first-steps/11-logical-operators/4-alert-and/solution.md @@ -6,5 +6,5 @@ alert( alert(1) && alert(2) ); Виклик `alert` повертає `undefined` (він просто показує повідомлення, тому не повертається значення, яке б мало сенс). -Через це `&&` обчислює лівий операнд (виводить `1`) і негайно зупиняється, оскільки `undefined` є не правдивим значенням. І `&&` шукає не правдиве значення і повертає його, як це і зроблено. +Через це `&&` обчислює лівий операнд (виводить `1`) і негайно зупиняється, оскільки `undefined` є хибним значенням. А `&&` шукає хибне значення і повертає його, як це і зроблено. diff --git a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md index 7fdfa2c5a..19181cbb9 100644 --- a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md +++ b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md @@ -2,7 +2,7 @@ importance: 3 --- -# Який результат alerts, об'єднаних І? +# Який результат alerts, об'єднаних через І? Що виведе код нижче? diff --git a/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md b/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md index c1784ae9f..cbd3ea7a4 100644 --- a/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md +++ b/1-js/02-first-steps/11-logical-operators/6-check-if-in-range/task.md @@ -4,6 +4,6 @@ importance: 3 # Перевірте діапазон -Напишіть умову "if", щоб перевірити, що `age` знаходиться між `14` та `90` включно. +Напишіть умову `if`, щоб перевірити, що `age` знаходиться між `14` та `90` включно. "Включно" означає, що `age` може досягати країв `14` або `90`. diff --git a/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md b/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md index 1084a0151..3d6aa3297 100644 --- a/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md +++ b/1-js/02-first-steps/11-logical-operators/7-check-if-out-range/task.md @@ -2,8 +2,8 @@ importance: 3 --- -# Перевірте зовнішній діапазон +# Перевірте значення поза діапазоном -Напишіть умову `if`: щоб перевірити, що вік `age` НЕ знаходиться між 14 та 90 включно. +Напишіть умову `if`, щоб перевірити, що значення `age` НЕ знаходиться між `14` та `90` включно. -Створіть два варіанти: перший використовує НЕ `!`, другий -- без нього. +Створіть два варіанти: перший з оператором НЕ `!`, другий -- без нього. diff --git a/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md b/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md index 9fdfa7fe5..7d4b3e03b 100644 --- a/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md +++ b/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md @@ -8,11 +8,11 @@ if (-1 || 0) alert( 'перший' ); // Не виконається -// -1 && 0 = 0, не правдивий +// -1 && 0 = 0, хибний if (-1 && 0) alert( 'другий' ); // Виконається -// Оператор && має більший приорітет, ніж || +// Оператор && має більший пріоритет, ніж || // тому -1 && 1 виконається першим, даючи нам послідовність: // null || -1 && 1 -> null || 1 -> 1 if (null || -1 && 1) alert( 'третій' ); diff --git a/1-js/02-first-steps/11-logical-operators/8-if-question/task.md b/1-js/02-first-steps/11-logical-operators/8-if-question/task.md index 12a14e6ea..0a1ebe221 100644 --- a/1-js/02-first-steps/11-logical-operators/8-if-question/task.md +++ b/1-js/02-first-steps/11-logical-operators/8-if-question/task.md @@ -4,9 +4,9 @@ importance: 5 # Питання про "if" -Який з цих `alert` буде виконано? +Які з цих `alert` буде виконано? -Які рузельтати виразів будуть у `if(...)`? +Якими будуть результати виразів у `if(...)`? ```js if (-1 || 0) alert( 'перший' ); diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg b/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg index ca3e0aead..1b0322c35 100644 --- a/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg +++ b/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg @@ -1 +1 @@ -BeginCanceledCanceledWelcome!I don't know youWrong passwordWho's there?Password?CancelCancelAdminTheMasterOtherOther \ No newline at end of file +ПочатокСкасованоСкасованоЛаскаво просимо!Я вас не знаюНеправильний парольХто там?Пароль?СкасованоСкасованоAdminГосподарІншеІнше \ No newline at end of file diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md b/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md index b69b572cc..0a88094cd 100644 --- a/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md +++ b/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md @@ -1,24 +1,24 @@ ```js run demo -let userName = prompt("Хто там?", ''); +let userName = prompt('Хто там?', ''); -if (userName == 'Admin') { +if (userName === 'Admin') { let pass = prompt('Пароль?', ''); - if (pass == 'TheMaster') { + if (pass === 'Господар') { alert( 'Ласкаво просимо!' ); - } else if (pass == '' || pass == null) { + } else if (pass === '' || pass === null) { alert( 'Скасовано' ); } else { alert( 'Неправильний пароль' ); } -} else if (userName == '' || userName == null) { +} else if (userName === '' || userName === null) { alert( 'Скасовано' ); } else { - alert( "Я вас не знаю" ); + alert( 'Я вас не знаю' ); } ``` diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/task.md b/1-js/02-first-steps/11-logical-operators/9-check-login/task.md index d225513b2..a730e56de 100644 --- a/1-js/02-first-steps/11-logical-operators/9-check-login/task.md +++ b/1-js/02-first-steps/11-logical-operators/9-check-login/task.md @@ -6,19 +6,19 @@ importance: 3 Напишіть код, який запитує логін за допомогою `prompt`. -Якщо відвідувач вводить `"Admin"`, тоді запропонуйте за допомогою `prompt` ввести пароль, i якщо вхідні данні є порожнім рядком або `key:Esc` -- показати "Скасовано", якщо це інакший рядок -- тоді покажіть "Я вас не знаю". +Якщо відвідувач вводить `"Admin"`, тоді запропонуйте за допомогою `prompt` ввести пароль. Якщо введено порожній рядок або натиснуто `key:Esc` -- показати "Скасовано". Якщо введено інший рядок -- тоді покажіть "Я вас не знаю". Пароль перевіряється наступним чином: -- Якщо він дорівнює "TheMaster", тоді покажіть "Ласкаво просимо!", +- Якщо він дорівнює "Господар", тоді покажіть "Ласкаво просимо!", - Інший рядок -- покажіть "Неправильний пароль", -- Для порожнього рядка, або якщо введення було скасовано, покажіть "Скасовано" +- Для порожнього рядка, або якщо введення було скасовано, покажіть "Скасовано". Схема: ![](ifelse_task.svg) -Будь ласка, використовуйте вкладені `if` блоки. Майте на увазі загальну читабельність коду. +Будь ласка, використовуйте вкладені `if` блоки. Потурбуйтесь про загальну читабельність коду. Підказка: передача порожнього вводу до запиту повертає порожній рядок `''`. Натискання `key:ESC` протягом запиту повертає `null`. diff --git a/1-js/02-first-steps/11-logical-operators/article.md b/1-js/02-first-steps/11-logical-operators/article.md index 5b2e6fe57..2ab3361d8 100644 --- a/1-js/02-first-steps/11-logical-operators/article.md +++ b/1-js/02-first-steps/11-logical-operators/article.md @@ -14,9 +14,9 @@ result = a || b; ``` -У класичному програмуванні логічний АБО призначений для маніпулювання лише булевими значеннями. Якщо будь-який з його аргументів `true`, він повертає `true`, інакше повертає `false`. +У класичному програмуванні логічний оператор АБО призначений для маніпулювання лише булевими значеннями. Якщо будь-який з його аргументів означає `true`, повертається `true`, інакше повертається `false`. -У JavaScript оператор більш складніший і потужніший. Але спочатку подивимося, що відбувається з булевими значеннями. +У JavaScript цей оператор складніший і потужніший. Але спочатку подивимося, що відбувається з булевими значеннями. Є чотири можливі логічні комбінації: @@ -27,7 +27,7 @@ alert( true || false ); // true alert( false || false ); // false ``` -Як бачимо, результат завжди `true`, за винятком випадку, коли обидва операнда `false`. +Як бачимо, результат завжди `true`, за винятком випадку, коли обидва операнди `false`. Якщо операнд не є булевим, він перетворюється на булевий для обчислення. @@ -39,7 +39,7 @@ if (1 || 0) { // працює так само, як ( true || false ) } ``` -У бильшості випадків АБО `||` використовується в операторі `if`, щоб перевірити, чи є *будь-яка* з заданих умов `true`. +У більшості випадків АБО `||` використовується в інструкціях `if`, щоб перевірити, чи є *будь-яка* із заданих умов `true`. Наприклад: @@ -70,7 +70,7 @@ if (hour < 10 || hour > 18 || isWeekend) { Розширений алгоритм працює наступним чином. -Дано кілька значень, розділених опертором АБО: +Дано кілька значень, розділених оператором АБО: ```js result = value1 || value2 || value3; @@ -84,7 +84,7 @@ result = value1 || value2 || value3; Значення повертається у первісному вигляді без конвертації. -Іншими словами, ланцюжок з АБО `"||"` повертає перше правдиве значення або останнє, якщо не знайдено правдивого значення. +Іншими словами, ланцюжок з АБО `||` повертає перше правдиве значення або останнє, якщо правдивого значення не знайдено. Наприклад: @@ -94,16 +94,16 @@ alert( 1 || 0 ); // 1 (1 є правдивим) alert( null || 1 ); // 1 (1 є першим правдивим значенням) alert( null || 0 || 1 ); // 1 (перше правдиве значення) -alert( undefined || null || 0 ); // 0 (усі не правдиві, повертає останнє значення) +alert( undefined || null || 0 ); // 0 (усі хибні, повертається останнє значення) ``` Це призводить до цікавого використання, у порівнянні з "чистим, класичним, виключно-булевим АБО". 1. **Отримання першого правдивого значення зі списку змінних або виразів.** - Наприклад, маємо змінні `firstName`, `lastName` та `nickName`, усі необов'язкові. + Наприклад, маємо змінні `firstName`, `lastName` та `nickName`, усі необов'язкові (тобто вони можуть бути невизначеними або мати неправдиві значення). - Використаємо АБО `||`, щоб вибрати ту змінну, яка має дані і виведемо її (або `анонімний` якщо немає даних): + Використаємо АБО `||`, щоб вибрати ту змінну, яка має дані, і виведемо її (або рядок `"Анонім"`, якщо жодна змінна не має даних): ```js run let firstName = ""; @@ -111,7 +111,7 @@ alert( undefined || null || 0 ); // 0 (усі не правдиві, повер let nickName = "СуперКодер"; *!* - alert( firstName || lastName || nickName || "Анонімний"); // СуперКодер + alert( firstName || lastName || nickName || "Анонім"); // СуперКодер */!* ``` @@ -120,21 +120,21 @@ alert( undefined || null || 0 ); // 0 (усі не правдиві, повер 2. **Обчислення короткого замикання.** Іншою особливістю оператора АБО `||` є так зване "обчислення короткого замикання". - + Це означає, що оператор `||` опрацьовує аргументи доти, доки не досягається перше правдиве значення, після чого це значення негайно повертається, без подальшого опрацювання решти аргументів. - - Важливість цієї особливості стає очевидною, коли операнд не проста змінна, а вираз з побічною дією, такі як присвоєння змінної, або виклик функції. - У наведеному нижче прикладі, виведеться лише друге повідомлення: + Важливість цієї поведінки стає очевидною, коли операнд не проста змінна, а вираз з побічною дією, як от визначення змінної або виклик функції. + + У наведеному нижче прикладі виведеться лише друге повідомлення: ```js run no-beautify *!*true*/!* || alert("не виведеться"); *!*false*/!* || alert("виведеться"); ``` - В першому рядку, оператор АБО `||` зупиняє виконання відразу після того, як "побачить" що лівий вираз `true`, тож `alert` не виконається. + В першому рядку оператор АБО `||` зупиняє виконання відразу після того, як "побачить" що лівий вираз є `true`, тож `alert` не виконається. - Деколи люди використовують таку конструкцію щоб виконати команди, якщо умова в лівій частині невірна. + Деколи таку конструкцію використовують, щоб виконувати команди лише за умови неправдивості умови ліворуч від оператора. ## && (І) @@ -144,7 +144,7 @@ alert( undefined || null || 0 ); // 0 (усі не правдиві, повер result = a && b; ``` -У класичному програмуванні І повертає `true`, якщо обидва оператора є правдивими і `false` у іншому випадку: +У класичному програмуванні І повертає `true`, якщо обидва оператори є правдивими, і `false` в іншому випадку: ```js run alert( true && true ); // true @@ -167,15 +167,15 @@ if (hour == 12 && minute == 30) { Так само, як з АБО, будь-яке значення дозволено як операнд І: ```js run -if (1 && 0) { // оцінюється як true && false - alert( "не буде працювати, тому що результат не правдивий" ); +if (1 && 0) { // обчислюється як true && false + alert( "не буде працювати, тому що результат хибний" ); } ``` -## І "&&" шукає перше не правдиве значення +## І "&&" шукає перше хибне значення -Дано декілька значень, об'єднаних І: +Дано декілька значень, об'єднаних кількома І: ```js result = value1 && value2 && value3; @@ -187,9 +187,9 @@ result = value1 && value2 && value3; - Перетворює кожен операнд на булевий. Якщо результат `false`, зупиняється і повертає оригінальне значення того операнда. - Якщо всі операнди були обчисленні (тобто усі були правдиві), повертає останній операнд. -Іншими словами, І повертає перше не правдиве значення, або останнє значення, якщо жодного не правдивого не було знайдено. +Іншими словами, І повертає перше хибне значення, або останнє значення, якщо жодного хибного не було знайдено. -Правила, наведені вище, подібні до АБО. Різниця полягає в тому, що І повертає перше *не правдиве* значення, тоді як АБО повертає перше *правдиве*. +Правила, наведені вище, подібні до правил АБО. Різниця полягає в тому, що І повертає перше *хибне* значення, тоді як АБО повертає перше *правдиве*. Приклади: @@ -199,13 +199,13 @@ result = value1 && value2 && value3; alert( 1 && 0 ); // 0 alert( 1 && 5 ); // 5 -// якщо перший операнд не правдивий, +// якщо перший операнд хибний, // І повертає саме його. Другий операнд ігнорується alert( null && 5 ); // null -alert( 0 && "не важливо" ); // 0 +alert( 0 && "неважливо" ); // 0 ``` -Ми також можемо передавати декілька значень поспіль. Подивіться, як повертається перший не правдивий: +Ми також можемо передавати декілька значень поспіль. Подивіться, як повертається перше хибне: ```js run alert( 1 && 2 && null && 3 ); // null @@ -217,14 +217,14 @@ alert( 1 && 2 && null && 3 ); // null alert( 1 && 2 && 3 ); // 3, останнє ``` -````smart header="Пріоритет І `&&` є більш високим за АБО `||`" -Пріоритет оператора І `&&` є більш високим за АБО `||`. +````smart header="Пріоритет І `&&` вище за АБО `||`" +Пріоритет оператора І `&&` вище за АБО `||`. -Отже, код `a && b || c && d` по суті є таким самим, як би вираз `&&` був у дужках: `(a && b) || (c && d)`. +Отже, код `a && b || c && d` по суті є таким самим, як код з виразами `&&` у дужках: `(a && b) || (c && d)`. ```` -````warn header="Не міняйте `if` на || чи &&" -Деколи люди використовують оператор І `&&` як "скорочений варіант `if`". +````warn header="Не міняйте `if` на `||` чи `&&`" +Деколи оператор І `&&` використовують як "скорочений варіант `if`". Наприклад: @@ -234,7 +234,7 @@ let x = 1; (x > 0) && alert( 'Більше за нуль!' ); ``` -Дія у правій частині `&&` буде виконуватися, тільки якщо обчислення дійде до неї. Тобто, тільки якщо `(x > 0)` є ічтинним. +Дія у правій частині `&&` буде виконуватися, тільки якщо обчислення дійде до неї. Тобто тільки якщо `(x > 0)` є істинним. Тому, власне, ми маємо аналог для: @@ -244,7 +244,7 @@ let x = 1; if (x > 0) alert( 'Більше за нуль!' ); ``` -Варіант з `&&` коротший. Але `if` є більш очевидним і зазвичай більш читабельний. Тому ми рекомендуємо використовувати кожну конструкцію за своїм призначенням: використовуємо `if`, якщо нам потрібен if і використовуємо `&&`, якщо нам потрібен І. +Хоча варіант з `&&` видається коротшим, конструкція з `if` є більш очевидною і зазвичай більш читабельною. Тому ми рекомендуємо використовувати кожну конструкцію за своїм призначенням: використовуємо `if`, якщо нам потрібна інструкція `if`, і використовуємо `&&`, якщо нам потрібен оператор І. ```` @@ -273,17 +273,17 @@ alert( !0 ); // true Подвійний НЕ `!!` іноді використовується для перетворення значення на булевий тип: ```js run -alert( !!"не пустий рядок" ); // true +alert( !!"непустий рядок" ); // true alert( !!null ); // false ``` -Тобто, перший НЕ перетворює значення на булево і повертає зворотне, а другий НЕ інвертує його знову. Зрештою, ми маємо просте перетворення значення на булевий тип. +Тобто, перший НЕ перетворює значення на булеве і повертає зворотне, а другий НЕ інвертує його знову. Зрештою ми маємо просте перетворення значень на булевий тип. -Є трохи більш детальний спосіб зробити те ж саме -- вбудована функція `Boolean`: +Є трохи довший спосіб зробити те ж саме -- вбудована функція `Boolean`: ```js run -alert( Boolean("не пустий рядок") ); // true +alert( Boolean("непустий рядок") ); // true alert( Boolean(null) ); // false ``` -Пріоритет НЕ `!` є навищим з усіх логічних операторів, тому він завжди виконується першим, перед `&&` або `||`. +Пріоритет НЕ `!` є найвищим з усіх логічних операторів, тому він завжди виконується першим, перед `&&` або `||`. From 4d0ed209afa5df5b3d2e7cee04ad41a99fdb1c6e Mon Sep 17 00:00:00 2001 From: Vse Mozhe Buty Date: Sat, 3 Oct 2020 18:28:17 +0300 Subject: [PATCH 2/2] Address review suggestions --- .../11-logical-operators/4-alert-and/task.md | 2 +- .../11-logical-operators/article.md | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md index 19181cbb9..06d54653d 100644 --- a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md +++ b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md @@ -2,7 +2,7 @@ importance: 3 --- -# Який результат alerts, об'єднаних через І? +# Який результат alerts, об'єднаних за допомогою І? Що виведе код нижче? diff --git a/1-js/02-first-steps/11-logical-operators/article.md b/1-js/02-first-steps/11-logical-operators/article.md index 2ab3361d8..91cfbf573 100644 --- a/1-js/02-first-steps/11-logical-operators/article.md +++ b/1-js/02-first-steps/11-logical-operators/article.md @@ -99,9 +99,9 @@ alert( undefined || null || 0 ); // 0 (усі хибні, повертаєтьс Це призводить до цікавого використання, у порівнянні з "чистим, класичним, виключно-булевим АБО". -1. **Отримання першого правдивого значення зі списку змінних або виразів.** +1. **Отримання першого істинного значення зі списку змінних або виразів.** - Наприклад, маємо змінні `firstName`, `lastName` та `nickName`, усі необов'язкові (тобто вони можуть бути невизначеними або мати неправдиві значення). + Наприклад, маємо змінні `firstName`, `lastName` та `nickName`, усі необов'язкові (тобто вони можуть бути невизначеними або мати хибні значення). Використаємо АБО `||`, щоб вибрати ту змінну, яка має дані, і виведемо її (або рядок `"Анонім"`, якщо жодна змінна не має даних): @@ -123,7 +123,7 @@ alert( undefined || null || 0 ); // 0 (усі хибні, повертаєтьс Це означає, що оператор `||` опрацьовує аргументи доти, доки не досягається перше правдиве значення, після чого це значення негайно повертається, без подальшого опрацювання решти аргументів. - Важливість цієї поведінки стає очевидною, коли операнд не проста змінна, а вираз з побічною дією, як от визначення змінної або виклик функції. + Важливість такої особливості стає очевидною, якщо операнд є не просто змінною, а виразом із побічним ефектом, як-от присвоєння змінної або виклик функції. У наведеному нижче прикладі виведеться лише друге повідомлення: @@ -134,7 +134,7 @@ alert( undefined || null || 0 ); // 0 (усі хибні, повертаєтьс В першому рядку оператор АБО `||` зупиняє виконання відразу після того, як "побачить" що лівий вираз є `true`, тож `alert` не виконається. - Деколи таку конструкцію використовують, щоб виконувати команди лише за умови неправдивості умови ліворуч від оператора. + Деколи таку конструкцію використовують, щоб виконувати команди лише при хибності умови ліворуч від оператора. ## && (І) @@ -218,7 +218,7 @@ alert( 1 && 2 && 3 ); // 3, останнє ``` ````smart header="Пріоритет І `&&` вище за АБО `||`" -Пріоритет оператора І `&&` вище за АБО `||`. +Оператор І `&&` має вищий пріоритет за АБО `||`. Отже, код `a && b || c && d` по суті є таким самим, як код з виразами `&&` у дужках: `(a && b) || (c && d)`. ```` @@ -273,7 +273,7 @@ alert( !0 ); // true Подвійний НЕ `!!` іноді використовується для перетворення значення на булевий тип: ```js run -alert( !!"непустий рядок" ); // true +alert( !!"не пустий рядок" ); // true alert( !!null ); // false ``` @@ -282,8 +282,8 @@ alert( !!null ); // false Є трохи довший спосіб зробити те ж саме -- вбудована функція `Boolean`: ```js run -alert( Boolean("непустий рядок") ); // true +alert( Boolean("не пустий рядок") ); // true alert( Boolean(null) ); // false ``` -Пріоритет НЕ `!` є найвищим з усіх логічних операторів, тому він завжди виконується першим, перед `&&` або `||`. +Пріоритет НЕ `!` є найвищим серед усіх логічних операторів, тому він завжди виконується першим, перед `&&` або `||`.