Conditionals & Loops
Objectives
- Use if/else conditionals to control program flow based on Boolean (true or false) tests.
- Use Boolean logic (!, &&, ||) to combine and manipulate conditional tests.
- Use switch/case conditionals to control program flow based on matching explicit values.
- Differentiate among true, false, 'truth-y', and 'false-y'.
- Review loop iteration using for and forEach, and introduce while and do/while loops.
Review
- Describe the concept of a "data type" and how it relates to variables.
- Declare, assign to, and manipulate data stored in a variable.
- Create arrays and access values in them.
- Iterate over and manipulate values in an array.
Conditionals allow us to check a condition, and respond to the answer of that condition
Comparison Operators
Comparisons in JavaScript can be made using <, >, <= and >=.
"A" > "a"
//=> false
"b" > "a"
//=> true
12 > "12"
//=> false
12 >= "12"
//=> true
General
Equality
True
Equality
Equality Operators
"dog" == "dog";
//=> true
1 == true;
//=> true
1 === true;
//=> false
true === true;
//=> true
"hello" === "hello"
//=> true
Remember the difference between equality and assignment
!= and !==
There are also != and !== operators, which are the negative versions of == and ===.
Negation
Truthy and Falsey
Does the value value coerces to true when evaluated in a boolean context.
What is Truthy & Falsy
function logTruthiness (val) {
if (val) {
console.log("Truthy!");
} else {
console.log("Falsy.");
}
}
Truthy
// Outputs: "Truthy!"
logTruthiness(true);
// Outputs: "Truthy!"
logTruthiness({});
// Outputs: "Truthy!"
logTruthiness([]);
// Outputs: "Truthy!"
logTruthiness("some string");
// Outputs: "Truthy!"
logTruthiness(3.14);
// Outputs: "Truthy!"
logTruthiness(new Date());
Falsy
// Outputs: "Falsy."
logTruthiness(false);
// Outputs: "Falsy."
logTruthiness(null);
// Outputs: "Falsy."
logTruthiness(undefined);
// Outputs: "Falsy."
logTruthiness(NaN);
// Outputs: "Falsy."
logTruthiness(0);
// Outputs: "Falsy."
logTruthiness("");
Use Negation!
!!1
//=> true
!!0
//=> false
!!-1
//=> true
!![]
//=> true
!!{}
//=> true
!!null
//=> false
!!""
//=> false
Boolean and Logical Operators
Boolean Operators
- AND, denoted "&&"
- OR, denoted "||"
- NOT, denoted "!"
true && true
//=> true
true && false
//=> false
false && false
//=> false
true || false
//=> true
false || true
//=> true
false || false
//=> false
!(true)
//=> false
Conditional Statements
If Statement
if (expr) { code }
if (1 > 0) {
console.log("hi");
}
//=> hi
If/Else Statement
if (expr) { code } else { other code }
if (0 > 1) {
console.log("hi");
} else {
console.log("bye");
}
//=> bye
If/Else Statement
var name = "kittens";
if (name === "puppies") {
name += "!";
} else if (name === "kittens") {
name += "!!";
} else {
name = "!" + name;
}
name === "kittens!!"
//=> true
Make sure to use EQUALITY not ASSIGNMENT in your If/Else Statement
// BAD
if (x = 3) {
console.log("boo");
}
// GOOD
if (x === 3) {
console.log("boo");
}
Ternary Operators
var age = 12;
//=> undefined
var allowed = (age > 18) ? "yes" : "no";
//=> undefined
allowed
//=> "no"
Independent Practice
Create a function that prints out the following statements based on the age input
- If you are under 16, you cannot do much outside of going to school
- If you are 16 or older, you can drive
- If you 18 or older, you can vote
- If you are 21 or older, you can drink alcohol
- If you are 25 or older, you can rent a car
- If you are 35 or older, you can run for president
- If you are 62 or older, you collect social security benefits
function whatCanIDo(age){
if (age < 16) {
console.log('You can go to school!')
} else if (age >= 16 && age < 18) {
console.log('You can drive!');
} else if (age >= 18 && age < 21) {
console.log('You can vote!');
} else if (age >= 21 && age < 25) {
console.log('You can drink alcohol!');
} else if (age >= 25 && age < 35) {
console.log('You can rent a car!');
} else if (age >= 35 && age < 62) {
console.log('You can run for president!');
} else if (age >= 62) {
console.log('You can collect social security!');
} else {
console.log('Please enter a correct age value');
}
}
Switch Statements
var food = "apple";
switch(food) {
case 'pear':
console.log("I like pears");
break;
case 'apple':
console.log("I like apples");
break;
default:
console.log("No favorite");
}
//=> I like apples
Let's Make a switch Statement
Create an if/else statement that returns a string, such as "Awesome Job" if the user gets a grade of “A” or "Bad Job" if they get an "F." Console.log a string for each letter grade.
Solution with If/Else
var grade = 'C';
if (grade === 'A') {
console.log('Awesome job');
} else if (grade === 'B') {
console.log('Good job');
} else if (grade === 'C') {
console.log('Okay job');
} else if (grade === 'D') {
console.log('Not so good job');
} else if (grade === 'F') {
console.log('Bad job');
} else {
console.log('Unexpected grade value entered');
}
Flip to a Switch!!
Solution with Switch
var grade = 'C';
switch (grade) {
case 'A':
console.log('Awesome job');
break;
case 'B':
console.log('Good job');
break;
case 'C':
console.log('Okay job');
break;
case 'D':
console.log('Not so good job');
break;
case 'F':
console.log('Bad job');
break;
default:
console.log('Unexpected grade value entered');
}
"break" in switch statements
var grade = 'C';
switch (grade) {
case 'A':
case 'B':
case 'C':
console.log('You passed!')
break
case 'D':
case 'F':
console.log('You failed')
break
default:
console.log('Unexpected grade value entered')
}
=> You passed!
While and Do-While
"While" is a loop statement that will run while a condition is true.
while (true) {
// an infinite loop!
}
// Try this in your browser!
// What do you think will happen?
var input = 0;
do {
console.log(input++);
} while (input < 10);
var result = "";
var i = 0;
do {
i = i + 1;
result = result + i;
} while (i < 5);
console.log(result);
// expected result: "12345"
Iteration
"for" loop
var a = [1, 2, 3, 4, 5];
for (var i = 0; i < a.length; i++) {
console.log(i);
}
"forEach()" loop
["dog", "cat", "hen"].forEach(function(currentValue, index, array) {
console.log("I want a ", currentValue);
console.log(array[index]);
});
Fizz Buzz
Construct a for loop that iterates through, and console.log()'s out, numbers 1 - 100:
Add an if/else statement that logs the string "fizz" if the value being iterated over is divisible by 3; otherwise, log out the value:
Add an else if clause that logs the string "buzz" if the value being iterated over is divisible by 5:
Add an else if clause that logs the string "buzz" if the value being iterated over is divisible by 5
Review
- Be able to explain if/else and switch statements as well as use cases.
- Differentiate between true, false, 'truthy', and 'falsey'.
Homework
Assignment 1: 99 Bottles of Beer
- Write a script that prints the lyrics to "99 Bottles of Beer on the Wall" in the terminal. Make sure your program can handle both singular and plural cases (i.e. both "100 bottles of beer" and "1 bottle of beer").
Assignment 2: Random Address Generator
- Write a script that can generate random addresses
- Each time you run the script, it should print a new randomly-generated address to the terminal. For example:
- node random-address.js
- => 34578 Dolphin Street, Wonka NY, 44506
July 25: Conditionals
By Jessica Bell
July 25: Conditionals
- 155