82 lines
3.4 KiB
Markdown
82 lines
3.4 KiB
Markdown
![]() |
---
|
|||
|
id: 587d7b85367417b2b2512b38
|
|||
|
title: Спільне використання оператору призначення замість оператору рівності
|
|||
|
challengeType: 1
|
|||
|
forumTopicId: 301191
|
|||
|
dashedName: catch-use-of-assignment-operator-instead-of-equality-operator
|
|||
|
---
|
|||
|
|
|||
|
# --description--
|
|||
|
|
|||
|
Розгалуження певних типів програм, які виконують різні дії у разі виконання певних умов, у JavaScript опирається на команди `if`, `else if` та `else`. Інколи такі умови відбуваються у формі перевірки або коли результат дорівнює значенню.
|
|||
|
|
|||
|
За цією логікою (принаймні в англійській мові), "якщо x дорівнює y, то..." на мову кодування можна перекласти, використовуючи `=` або оператор присвоєння. Це призводить до неочікуваних потоків керування у вашій програмі.
|
|||
|
|
|||
|
Як зазначено у попередніх завданнях, у JavaScript оператор присвоєння (`=`) надає значення для назв змінних. І оператори `==` та `===` перевіряють їх на рівність (потрійні `===` тести для суворої рівності, вказуючи, що як значення, так і тип є однаковими).
|
|||
|
|
|||
|
Поданий нижче код присвоює `x` значення 2, що оцінюватиметься як `true`. Майже кожне значення у JavaScript самостійно оцінюється до `true`, за винятком деяких випадків, які нам відомі як неправильні значення: `false`, `0`, `""` (пустий рядок), `NaN`, `undefined` та `null`.
|
|||
|
|
|||
|
```js
|
|||
|
let x = 1;
|
|||
|
let y = 2;
|
|||
|
if (x = y) {
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
У цьому прикладі блок коду в межах оператора `if` не виконуватиметься для будь-якого значення `y`, якщо тільки `y` не буде помилковим. Блок `else`, який за нашими очікуваннями повинен тут виконуватися, насправді не буде запускатися.
|
|||
|
|
|||
|
# --instructions--
|
|||
|
|
|||
|
Виправіть умову таким чином, щоб програма виконувалася у правій гілці, і відповідне значення було присвоєне `result`.
|
|||
|
|
|||
|
# --hints--
|
|||
|
|
|||
|
Ваш код має виправити умову так, щоб відбувалася перевірка рівності замість використання оператора присвоєння.
|
|||
|
|
|||
|
```js
|
|||
|
assert(result == 'Not equal!');
|
|||
|
```
|
|||
|
|
|||
|
Умова має використовувати або `==`, або `===`, щоб відбувалася перевірка рівності.
|
|||
|
|
|||
|
```js
|
|||
|
assert(code.match(/x\s*?===?\s*?y/g));
|
|||
|
```
|
|||
|
|
|||
|
# --seed--
|
|||
|
|
|||
|
## --seed-contents--
|
|||
|
|
|||
|
```js
|
|||
|
let x = 7;
|
|||
|
let y = 9;
|
|||
|
let result = "to come";
|
|||
|
|
|||
|
if(x = y) {
|
|||
|
result = "Equal!";
|
|||
|
} else {
|
|||
|
result = "Not equal!";
|
|||
|
}
|
|||
|
|
|||
|
console.log(result);
|
|||
|
```
|
|||
|
|
|||
|
# --solutions--
|
|||
|
|
|||
|
```js
|
|||
|
let x = 7;
|
|||
|
let y = 9;
|
|||
|
let result = "to come";
|
|||
|
|
|||
|
if(x === y) {
|
|||
|
result = "Equal!";
|
|||
|
} else {
|
|||
|
result = "Not equal!";
|
|||
|
}
|
|||
|
|
|||
|
console.log(result);
|
|||
|
```
|