* feat(tools): add seed/solution restore script * chore(curriculum): remove empty sections' markers * chore(curriculum): add seed + solution to Chinese * chore: remove old formatter * fix: update getChallenges parse translated challenges separately, without reference to the source * chore(curriculum): add dashedName to English * chore(curriculum): add dashedName to Chinese * refactor: remove unused challenge property 'name' * fix: relax dashedName requirement * fix: stray tag Remove stray `pre` tag from challenge file. Signed-off-by: nhcarrigan <nhcarrigan@gmail.com> Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2.1 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
587d7b85367417b2b2512b38 | Catch Use of Assignment Operator Instead of Equality Operator | 1 | 301191 | 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
.
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.
assert(result == 'Not equal!');
The condition should use either ==
or ===
to test for equality.
assert(code.match(/x\s*?===?\s*?y/g));
--seed--
--seed-contents--
let x = 7;
let y = 9;
let result = "to come";
if(x = y) {
result = "Equal!";
} else {
result = "Not equal!";
}
console.log(result);
--solutions--
let x = 7;
let y = 9;
let result = "to come";
if(x === y) {
result = "Equal!";
} else {
result = "Not equal!";
}
console.log(result);