8. Control Structures

Conditional Statements

if Statement

let age = 18;

if (age >= 18) {
    console.log("You can vote!");
}

if-else Statement

let temperature = 25;

if (temperature > 30) {
    console.log("It's hot!");
} else {
    console.log("It's not too hot.");
}

if-else if-else Statement

let score = 85;

if (score >= 90) {
    console.log("Grade: A");
} else if (score >= 80) {
    console.log("Grade: B");
} else if (score >= 70) {
    console.log("Grade: C");
} else {
    console.log("Grade: F");
}

Ternary Operator (Conditional Expression)

let age = 20;
let status = age >= 18 ? "Adult" : "Minor";
console.log(status); // "Adult"

Switch Statement

let day = 3;
let dayName;

switch (day) {
    case 1:
        dayName = "Monday";
        break;
    case 2:
        dayName = "Tuesday";
        break;
    case 3:
        dayName = "Wednesday";
        break;
    case 4:
        dayName = "Thursday";
        break;
    case 5:
        dayName = "Friday";
        break;
    case 6:
        dayName = "Saturday";
        break;
    case 7:
        dayName = "Sunday";
        break;
    default:
        dayName = "Invalid day";
}

console.log(dayName); // "Wednesday"

Switch with Multiple Cases

let fruit = "apple";

switch (fruit) {
    case "apple":
    case "pear":
    case "peach":
        console.log("This is a pome fruit.");
        break;
    case "orange":
    case "lemon":
    case "lime":
        console.log("This is a citrus fruit.");
        break;
    default:
        console.log("Unknown fruit type.");
}

Loops

for Loop

// Basic for loop
for (let i = 0; i < 5; i++) {
    console.log(i); // 0, 1, 2, 3, 4
}

// Iterating over array
let fruits = ["apple", "banana", "orange"];
for (let i = 0; i < fruits.length; i++) {
    console.log(fruits[i]);
}

for...of Loop (ES6+)

let numbers = [1, 2, 3, 4, 5];

for (let number of numbers) {
    console.log(number);
}

// Works with strings too
let text = "Hello";
for (let char of text) {
    console.log(char);
}

for...in Loop

let person = {
    name: "John",
    age: 30,
    city: "New York"
};

for (let key in person) {
    console.log(`${key}: ${person[key]}`);
}
// Output:
// name: John
// age: 30
// city: New York

while Loop

let count = 0;

while (count < 5) {
    console.log(count);
    count++;
}

do...while Loop

let i = 0;

do {
    console.log(i);
    i++;
} while (i < 5);

// The loop body executes at least once
let j = 10;
do {
    console.log(j);
    j++;
} while (j < 5); // Still prints 10

Loop Control Statements

break Statement

for (let i = 0; i < 10; i++) {
    if (i === 5) {
        break; // Exit the loop
    }
    console.log(i); // 0, 1, 2, 3, 4
}

continue Statement

for (let i = 0; i < 10; i++) {
    if (i % 2 === 0) {
        continue; // Skip even numbers
    }
    console.log(i); // 1, 3, 5, 7, 9
}

Labeled Statements

outerLoop: for (let i = 0; i < 3; i++) {
    innerLoop: for (let j = 0; j < 3; j++) {
        if (i === 1 && j === 1) {
            break outerLoop; // Break out of both loops
        }
        console.log(`i: ${i}, j: ${j}`);
    }
}

Error Handling

try...catch Statement

try {
    let result = riskyOperation();
    console.log("Success:", result);
} catch (error) {
    console.log("Error occurred:", error.message);
} finally {
    console.log("This always runs");
}

throw Statement

function divide(a, b) {
    if (b === 0) {
        throw new Error("Division by zero!");
    }
    return a / b;
}

try {
    console.log(divide(10, 0));
} catch (error) {
    console.log(error.message); // "Division by zero!"
}

Next Steps

Control structures allow you to control the flow of your programs. Next, let's explore functions, which are reusable blocks of code.