JavaScript Basics
                CMU422: Fundamentals of Web Design - Session 6
                Birmingham Newman University
                Lecturer: James Williams
                Adding interactivity and dynamic behavior
                3-hour session • 25 slides • 2 interactive tasks
                
                    Session Timeline:
                    
                        - 10 min: Registration & waiting
 
                        - 20 min: Opening slides
 
                        - 45 min: Task 1
 
                        - 15 min: Break/Catch up
 
                        - 20 min: Secondary slides
 
                        - 45 min: Task 2
 
                        - Remaining: Self-study
 
                    
                 
            
            
            
                Learning Objectives
                
                    - Understand what JavaScript is and its role in web development
 
                    - Learn JavaScript syntax and basic concepts
 
                    - Master variables, data types, and operators
 
                    - Create functions and control structures
 
                    - Manipulate the DOM (Document Object Model)
 
                
            
            
            
                What is JavaScript?
                
                    JavaScript is a programming language that adds interactivity to
                    web pages
                
                
                    - Makes web pages dynamic and interactive
 
                    - Runs in the browser (client-side)
 
                    - Can also run on servers (Node.js)
 
                    - Essential for modern web development
 
                
                
                    // Simple JavaScript example
                    console.log("Hello, World!");
                    alert("Welcome to our website!");
                
                
                
                    Watch: JavaScript Fundamentals Explained
                    
                        
                    
                    
                        Comprehensive introduction to JavaScript - the programming language of the
                        web
                    
                 
            
            
            
                Adding JavaScript to HTML
                
                    <!-- Method 1: External JavaScript -->
                    <script src="script.js"></script>
                    <!-- Method 2: Internal JavaScript -->
                    <script>
                      console.log("Hello from internal script");
                    </script>
                    <!-- Method 3: Inline JavaScript -->
                    <button onclick="alert('Hello!')">Click me</button>
                
                
                    - External: Best for multiple pages
 
                    - Internal: Good for single page
 
                    - Inline: Avoid for maintainability
 
                
            
            
            
                JavaScript Syntax
                
                    // This is a comment
                    let message = "Hello World";
                    const PI = 3.14159;
                    if (condition) {
                      // code block
                    }
                    function greet() {
                      return "Hello!";
                    }
                
                
                    - Statements end with semicolons (optional but recommended)
 
                    - Use 
// for single-line comments 
                    - Use 
/* */ for multi-line comments 
                    - Code blocks use curly braces 
{} 
                
            
            
            
                Variables
                
                    // Variable declaration
                    let name = "John";
                    let age = 25;
                    let isStudent = true;
                    // Reassigning values
                    name = "Jane";
                    age = 30;
                    // Constants (cannot be changed)
                    const PI = 3.14159;
                    const COMPANY = "Tech Corp";
                
                
                    let: Block-scoped, can be reassigned 
                    const: Block-scoped, cannot be reassigned 
                    var: Function-scoped (avoid in modern JS) 
                    - Use descriptive variable names
 
                
            
            
            
                JavaScript Data Types
                
                    // String
                    let text = "Hello World";
                    let name = 'John';
                    // Number
                    let age = 25;
                    let price = 19.99;
                    // Boolean
                    let isActive = true;
                    let isLoggedIn = false;
                    // Undefined
                    let notDefined;
                    // Null
                    let emptyValue = null;
                
                
                    - String: Text data
 
                    - Number: Integers and decimals
 
                    - Boolean: true or false
 
                    - Undefined: Variable declared but not assigned
 
                    - Null: Intentional absence of value
 
                
            
            
            
                JavaScript Operators
                
                    // Arithmetic operators
                    let sum = 5 + 3; // 8
                    let diff = 10 - 4; // 6
                    let product = 6 * 7; // 42
                    let quotient = 15 / 3; // 5
                    let remainder = 17 % 5; // 2
                    // Assignment operators
                    let x = 10;
                    x += 5; // Same as x = x + 5
                    x -= 3; // Same as x = x - 3
                    x *= 2; // Same as x = x * 2
                
                
                
                    Try It: Interactive Calculator
                    
                    
                        Click the buttons to perform calculations using JavaScript operators!
                    
                 
            
            
            
                Comparison Operators
                
                    // Comparison operators
                    let a = 5;
                    let b = "5";
                    a == b; // true (loose equality)
                    a === b; // false (strict equality)
                    a != b; // false
                    a !== b; // true
                    a > 3; // true
                    a >= 5; // true
                    a < 10; // true
                        a <= 5; // true 
                            
                                ==: Loose equality (converts types) 
                                ===: Strict equality (no type conversion) 
                                - Always use 
=== and !== when possible
                                 
                            
            
            
            
                Logical Operators
                
                    // Logical operators
                    let isLoggedIn = true;
                    let hasPermission = false;
                    isLoggedIn && hasPermission; // false (AND)
                    isLoggedIn || hasPermission; // true (OR)
                    !isLoggedIn; // false (NOT)
                    // Short-circuit evaluation
                    let name = "John" || "Guest"; // "John"
                    let age = 0 || 25; // 25
                
                
                    &&: AND (both must be true) 
                    ||: OR (at least one must be true) 
                    !: NOT (inverts boolean value) 
                
            
            
            
                Working with Strings
                
                    let firstName = "John";
                    let lastName = "Doe";
                    // String concatenation
                    let fullName = firstName + " " + lastName;
                    // Template literals (ES6)
                    let greeting = `Hello, ${firstName}!`;
                    // String methods
                    let message = "Hello World";
                    message.length; // 11
                    message.toUpperCase(); // "HELLO WORLD"
                    message.toLowerCase(); // "hello world"
                    message.indexOf("World"); // 6
                
            
            
            
                Arrays
                
                    // Creating arrays
                    let fruits = ["Apple", "Banana", "Orange"];
                    let numbers = [1, 2, 3, 4, 5];
                    let mixed = ["text", 42, true];
                    // Accessing elements
                    fruits[0]; // "Apple"
                    fruits[1]; // "Banana"
                    // Array methods
                    fruits.push("Grape"); // Add to end
                    fruits.pop(); // Remove from end
                    fruits.unshift("Lemon"); // Add to beginning
                    fruits.shift(); // Remove from beginning
                
            
            
            
                Functions
                
                    // Function declaration
                    function greet(name) {
                      return `Hello, ${name}!`;
                    }
                    // Function expression
                    let multiply = function(a, b) {
                      return a * b;
                    };
                    // Arrow function (ES6)
                    let divide = (a, b) => a / b;
                    // Calling functions
                    greet("John"); // "Hello, John!"
                    multiply(5, 3); // 15
                    divide(10, 2); // 5
                
                
                
                    Try It: Number Guessing Game
                    
                    
                        This game uses functions to handle game logic, validation, and feedback!
                    
                 
            
            
            
                Control Structures
                
                    // If statement
                    let age = 18;
                    if (age >= 18) {
                      console.log("Adult");
                    } else {
                      console.log("Minor");
                    }
                    // Switch statement
                    let day = "Monday";
                    switch(day) {
                      case "Monday":
                        console.log("Start of week");
                        break;
                      default:
                        console.log("Other day");
                    }
                
            
            
            
                Loops
                
                    // For loop
                    for (let i = 0; i < 5; i++) {
                          console.log(i);
                        }
                        // While loop
                        let count = 0;
                        while (count < 3) {
                              console.log(count);
                              count++;
                            }
                            // For...of loop (arrays)
                            let fruits = ["Apple", "Banana", "Orange"];
                            for (let fruit of fruits) {
                              console.log(fruit);
                            }
                
            
            
            
                DOM Manipulation
                
                    // Selecting elements
                    let element = document.getElementById("myId");
                    let elements = document.getElementsByClassName("myClass");
                    let element = document.querySelector(".myClass");
                    // Changing content
                    element.innerHTML = "New content";
                    element.textContent = "Plain text";
                    // Changing styles
                    element.style.color = "red";
                    element.style.fontSize = "20px";
                    // Adding/removing classes
                    element.classList.add("highlight");
                    element.classList.remove("old-class");
                
            
            
            
                Event Handling
                
                    // HTML
                    <button id="myButton">Click me</button>
                    // JavaScript
                    let button = document.getElementById("myButton");
                    button.addEventListener("click", function() {
                      alert("Button clicked!");
                    });
                    // Arrow function version
                    button.addEventListener("click", () => {
                      console.log("Button clicked!");
                    });
                
                
                    - Common events: click, mouseover, keydown, submit
 
                    - Use 
addEventListener for event handling 
                    - Can add multiple event listeners to same element
 
                
            
            
            
                Task 1: Basic JavaScript Practice
                
                    Instructions:
                    
                        - Create a new HTML file called 
js-practice.html 
                        - Add a <script> tag in the <head> section
 
                        - Practice the following JavaScript concepts:
 
                        
                            - Declare variables with different data types
 
                            - Create a function that takes parameters
 
                            - Use arithmetic and comparison operators
 
                            - Create an array and access its elements
 
                            - Use a loop to iterate through the array
 
                            - Add a button that triggers a JavaScript function
 
                        
                        - Use console.log() to see your output
 
                    
                    Time: 45 minutes
                    This task will help you understand basic JavaScript syntax and
                            concepts
                 
            
            
            
                Break Time
                
                    15 Minutes
                    Take a break, ask questions, or catch up on the previous task.
                    Next: Secondary slides and Task 2
                 
            
            
            
                Error Handling
                
                    // Try-catch statement
                    try {
                      let result = 10 / 0;
                      console.log(result);
                    } catch (error) {
                      console.error("An error occurred:", error.message);
                    } finally {
                      console.log("This always runs");
                    }
                    // Throwing custom errors
                    function divide(a, b) {
                      if (b === 0) {
                        throw new Error("Cannot divide by zero");
                      }
                      return a / b;
                    }
                
            
            
            
                Scope and Hoisting
                
                    // Global scope
                    let globalVar = "I'm global";
                    function myFunction() {
                      // Local scope
                      let localVar = "I'm local";
                      console.log(globalVar); // Can access global
                      console.log(localVar); // Can access local
                    }
                    // Hoisting example
                    console.log(x); // undefined (not an error)
                    var x = 5; // var is hoisted
                    console.log(y); // ReferenceError
                    let y = 10; // let is not hoisted
                
            
            
            
                Objects
                
                    // Object literal
                    let person = {
                      name: "John",
                      age: 30,
                      city: "New York",
                      greet: function() {
                        return `Hello, I'm ${this.name}`;
                      }
                    };
                    // Accessing properties
                    person.name; // "John"
                    person["age"]; // 30
                    person.greet(); // "Hello, I'm John"
                    // Adding properties
                    person.email = "john@example.com";
                
            
            
            
                JSON (JavaScript Object Notation)
                
                    // JSON string
                    let jsonString = '{"name":"John","age":30,"city":"NYC"}';
                    // Parse JSON to object
                    let obj = JSON.parse(jsonString);
                    console.log(obj.name); // "John"
                    // Convert object to JSON
                    let person = {name: "Jane", age: 25};
                    let json = JSON.stringify(person);
                    console.log(json); // '{"name":"Jane","age":25}'
                
                
                    - JSON is a data format, not a programming language
 
                    - Commonly used for API communication
 
                    JSON.parse() converts JSON to object 
                    JSON.stringify() converts object to JSON 
                
            
            
            
                Debugging JavaScript
                
                    console.log(): Output values to console 
                    console.error(): Log errors 
                    console.warn(): Log warnings 
                    console.table(): Display data in table format 
                    - Browser Developer Tools: Set breakpoints
 
                    debugger;: Programmatic breakpoint 
                
                
                    // Debugging example
                    let x = 5;
                    let y = 10;
                    console.log("x =", x, "y =", y);
                    console.table({x, y});
                    debugger; // Execution stops here
                    let result = x + y;
                
            
            
            
                Task 2: Interactive Web Page
                
                    Instructions:
                    
                        - Create a new HTML file called 
interactive-page.html 
                        - Build an interactive page with:
 
                        
                            - Form: Input fields for name, age, and favorite
                                color
 
                            - Button: Submit button that collects form data
 
                            - Display: Show collected data in a formatted way
                            
 
                            - Validation: Check if fields are filled
 
                            - Styling: Change page colors based on favorite color
                            
 
                        
                        - Use DOM manipulation to update the page
 
                        - Add event listeners for user interactions
 
                        - Include error handling for invalid inputs
 
                    
                    Time: 45 minutes
                    This task will help you understand DOM manipulation and event
                            handling
                 
            
            
            
                Session Summary
                
                    - JavaScript adds interactivity to web pages
 
                    - Master variables, data types, and operators
 
                    - Use functions to organize and reuse code
 
                    - Control structures manage program flow
 
                    - DOM manipulation creates dynamic content
 
                
                
                    Next Session:
                    JavaScript Events and Interactivity - Building responsive user interfaces