80 lines
2.1 KiB
Markdown
80 lines
2.1 KiB
Markdown
![]() |
---
|
||
|
id: 587d7b85367417b2b2512b38
|
||
|
title: Catch Use of Assignment Operator Instead of Equality Operator
|
||
|
challengeType: 1
|
||
|
forumTopicId: 301191
|
||
|
dashedName: catch-use-of-assignment-operator-instead-of-equality-operator
|
||
|
---
|
||
|
|
||
|
# --description--
|
||
|
|
||
|
Branching programs, i.e. ones that do different things if certain conditions are met, rely on `if`, `else if`, and `else` statements in JavaScript. The condition sometimes takes the form of testing whether a result is equal to a value.
|
||
|
|
||
|
This logic is spoken (in English, at least) as "if x equals y, then ..." which can literally translate into code using the `=`, or assignment operator. This leads to unexpected control flow in your program.
|
||
|
|
||
|
As covered in previous challenges, the assignment operator (`=`) in JavaScript assigns a value to a variable name. And the `==` and `===` operators check for equality (the triple `===` tests for strict equality, meaning both value and type are the same).
|
||
|
|
||
|
The code below assigns `x` to be 2, which evaluates as `true`. Almost every value on its own in JavaScript evaluates to `true`, except what are known as the "falsy" values: `false`, `0`, `""` (an empty string), `NaN`, `undefined`, and `null`.
|
||
|
|
||
|
```js
|
||
|
let x = 1;
|
||
|
let y = 2;
|
||
|
if (x = y) {
|
||
|
// this code block will run for any value of y (unless y were originally set as a falsy)
|
||
|
} else {
|
||
|
// this code block is what should run (but won't) in this example
|
||
|
}
|
||
|
```
|
||
|
|
||
|
# --instructions--
|
||
|
|
||
|
Fix the condition so the program runs the right branch, and the appropriate value is assigned to `result`.
|
||
|
|
||
|
# --hints--
|
||
|
|
||
|
Your code should fix the condition so it checks for equality, instead of using assignment.
|
||
|
|
||
|
```js
|
||
|
assert(result == 'Not equal!');
|
||
|
```
|
||
|
|
||
|
The condition should use either `==` or `===` to test for equality.
|
||
|
|
||
|
```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);
|
||
|
```
|