- Introduction to JavaScript
- Setting Up Development Environment
- JavaScript in HTML
- Working with Data
- Program Flow
- Functions Deep Dive
- DOM Basics
- Basic Event Handling
JavaScript is a versatile programming language that enables interactive and dynamic web content. It runs in browsers, on servers, and in various other environments.
- Dynamic typing
- First-class functions
- Object-oriented capabilities
- Event-driven programming
- Rich ecosystem of libraries and frameworks
// Web Development document.getElementById('myButton').onclick = function() { alert('Button clicked!'); } // Server-side (Node.js) const http = require('http'); const server = http.createServer((req, res) => { res.end('Hello World!'); }); // Mathematics const calculateArea = (radius) => Math.PI * radius ** 2; // Data Manipulation const users = ['John', 'Jane', 'Bob']; const filtered = users.filter(name => name.startsWith('J'));
// Popular Code Editors: // 1. Visual Studio Code (VS Code) - Free, lightweight, extensive plugins // 2. Sublime Text - Fast, customizable // 3. WebStorm - Full IDE, powerful features // Essential VS Code Extensions: // - JavaScript (ES6) code snippets // - ESLint - Code quality checker // - Prettier - Code formatter // - Live Server - Local development server
// Chrome DevTools Shortcuts: // F12 or Ctrl+Shift+I - Open DevTools // Ctrl+Shift+J - Open Console // Ctrl+Shift+C - Inspect Elements // Debugging in Console console.log('Basic output'); // Simple logging console.info('Information'); // Info level console.warn('Warning'); // Warning level console.error('Error'); // Error level console.table(['a', 'b', 'c']); // Table format
my-project/
├── index.html // Main HTML file
├── css/
│ └── styles.css // Stylesheet
├── js/
│ ├── main.js // Main JavaScript file
│ └── utils.js // Utility functions
└── images/ // Image assets
<!-- 1. Internal JavaScript (in HTML file) --> <script> // Your JavaScript code here const greeting = "Hello World!"; console.log(greeting); </script> <!-- 2. External JavaScript (separate .js file) --> <!-- Best practice: Place before closing </body> tag --> <script src="js/main.js"></script> <!-- 3. Async loading (downloads in background) --> <script src="js/analytics.js" async></script> <!-- 4. Defer loading (runs after HTML loads) --> <script src="js/main.js" defer></script>
// DOMContentLoaded - HTML is loaded and parsed document.addEventListener('DOMContentLoaded', () => { // Your code here - DOM is ready! const title = document.querySelector('h1'); title.style.color = 'blue'; }); // Window load - Everything is loaded window.onload = () => { // Your code here - Images and resources are ready! const images = document.querySelectorAll('img'); console.log('Total images:', images.length); };
<!-- Using modules --> <script type="module"> // Import features from other files import { helper } from './utils.js'; // Use modern JavaScript features const numbers = [1, 2, 3]; const doubled = numbers.map(x => x * 2); </script>
// String creation and manipulation const firstName = "John"; const lastName = 'Doe'; // Single or double quotes work // Template literals - modern string formatting const greeting = `Hello, ${firstName}!`; // Using variables in strings // Common string methods const text = "JavaScript is awesome"; text.length; // Get string length: 21 text.toUpperCase(); // Convert to uppercase: "JAVASCRIPT IS AWESOME" text.toLowerCase(); // Convert to lowercase: "javascript is awesome" text.split(' '); // Split into array: ["JavaScript", "is", "awesome"] text.includes('Java'); // Check if contains: true text.replace('awesome', 'amazing'); // Replace text
// Number types and calculations const integer = 42; // Whole number const float = 3.14; // Decimal number const scientific = 2.998e8; // Scientific notation // Math operations Math.round(3.6); // Round to nearest integer: 4 Math.floor(3.6); // Round down: 3 Math.ceil(3.2); // Round up: 4 Math.random(); // Random number between 0 and 1 Math.max(1, 2, 3); // Find highest number: 3 Math.min(1, 2, 3); // Find lowest number: 1 // Number formatting const price = 42.5678; price.toFixed(2); // Format decimals: "42.57"
// Converting between types String(123); // Number to string: "123" Number("123"); // String to number: 123 Boolean(1); // To boolean: true // Type checking typeof "hello"; // Returns: "string" typeof 42; // Returns: "number" typeof true; // Returns: "boolean" Array.isArray([1,2,3]); // Check for array: true // Common type conversion gotchas Number("hello"); // NaN (Not a Number) Number(null); // 0 Number(undefined); // NaN Boolean(""); // false Boolean(0); // false Boolean("0"); // true
// If statements - the building blocks of logic const age = 18; // Simple if statement if (age >= 18) { console.log("You can vote!"); // Will run if age is 18 or more } // If-else for two possibilities const time = 14; if (time < 12) { console.log("Good morning!"); // Before noon } else { console.log("Good afternoon!"); // Noon or later } // Multiple conditions with else-if const score = 85; if (score >= 90) { console.log("A grade"); // 90 or above } else if (score >= 80) { console.log("B grade"); // 80-89 } else if (score >= 70) { console.log("C grade"); // 70-79 } else { console.log("Need improvement"); // Below 70 }
// For loop - when you know how many times to loop for (let i = 0; i < 5; i++) { console.log(`Count: ${i}`); // Counts 0 through 4 } // While loop - when you don't know how many iterations let coins = 0; while (coins < 10) { coins++; // Adds coins until we have 10 console.log(`You have ${coins} coins`); } // For...of loop - iterate over arrays const fruits = ['apple', 'banana', 'orange']; for (const fruit of fruits) { console.log(`I like ${fruit}`); // Prints each fruit } // Break and Continue for (let i = 0; i < 5; i++) { if (i === 3) break; // Stops at 3 console.log(i); // Prints 0, 1, 2 } for (let i = 0; i < 5; i++) { if (i === 3) continue; // Skips 3 console.log(i); // Prints 0, 1, 2, 4 }
// Regular function declaration function sayHello(name) { return `Hello, ${name}!`; // Returns a greeting } // Function expression const greet = function(name) { return `Hi, ${name}!`; // Another way to create functions }; // Arrow function - modern, concise syntax const welcome = (name) => `Welcome, ${name}!`; // Functions with default parameters function greetUser(name = "Guest") { return `Hello, ${name}!`; // Uses "Guest" if no name provided }
// Global vs Local scope let globalVar = "I'm global"; // Available everywhere function scopeExample() { let localVar = "I'm local"; // Only available inside function console.log(globalVar); // Can access global console.log(localVar); // Can access local } // Closure - function remembering its scope function counter() { let count = 0; // Private variable return { increment: () => ++count, getCount: () => count }; } const myCounter = counter(); myCounter.increment(); // Returns 1 myCounter.increment(); // Returns 2 myCounter.getCount(); // Returns 2
// Callback functions function doAfterDelay(callback) { setTimeout(() => { console.log("Delayed operation complete"); callback(); // Runs the provided function }, 1000); } // Method chaining const calculator = { value: 0, add(n) { this.value += n; return this; // Returns object for chaining }, subtract(n) { this.value -= n; return this; }, getResult() { return this.value; } }; calculator.add(5).subtract(2).add(10); // Chains methods together
// The DOM represents HTML as a tree structure document // The root element └── html // Root HTML element ├── head // Head section │ ├── title │ └── meta └── body // Body section ├── header ├── main └── footer // Basic document access document.documentElement; // The <html> element document.head; // The <head> element document.body; // The <body> element
// Single element selectors const header = document.getElementById('main-header'); // By ID const firstButton = document.querySelector('.btn'); // First matching CSS selector // Multiple element selectors const paragraphs = document.getElementsByTagName('p'); // All <p> elements const buttons = document.getElementsByClassName('btn'); // All elements with class 'btn' const links = document.querySelectorAll('a'); // All elements matching selector // Navigation properties const parent = element.parentElement; // Parent element const children = element.children; // Child elements const next = element.nextElementSibling; // Next sibling const prev = element.previousElementSibling; // Previous sibling
// Changing content element.textContent = 'New text'; // Update text content element.innerHTML = '<span>New HTML</span>'; // Update HTML content // Working with attributes element.setAttribute('class', 'new-class'); // Set attribute element.getAttribute('class'); // Get attribute value element.removeAttribute('class'); // Remove attribute element.hasAttribute('class'); // Check if attribute exists // Styling elements element.style.color = 'blue'; // Change text color element.style.backgroundColor = '#fff'; // Change background element.style.fontSize = '16px'; // Change font size // CSS classes element.classList.add('active'); // Add class element.classList.remove('disabled'); // Remove class element.classList.toggle('visible'); // Toggle class element.classList.contains('hidden'); // Check for class
// Common types of events // click - When element is clicked // submit - When form is submitted // keydown - When keyboard key is pressed // mouseover - When mouse moves over element // load - When page/image loads // change - When form input changes // Basic event handling const button = document.querySelector('#myButton'); button.onclick = function() { console.log('Button clicked!'); // Simple click handler }; // Modern event listener approach button.addEventListener('click', function() { console.log('Button clicked!'); // Better practice });
// Working with the event object button.addEventListener('click', function(event) { // Common event properties event.target; // Element that triggered event event.currentTarget; // Element handling the event event.type; // Type of event (e.g., 'click') event.timestamp; // When event occurred // Prevent default behavior event.preventDefault(); // Stop form submission, link navigation // Stop event bubbling event.stopPropagation(); // Prevent event from bubbling up });
// Form submission const form = document.querySelector('form'); form.addEventListener('submit', function(event) { event.preventDefault(); // Prevent form from submitting // Get form data const formData = new FormData(form); const username = formData.get('username'); console.log(`Form submitted by ${username}`); }); // Keyboard events document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { console.log('Escape key pressed!'); } }); // Mouse events const box = document.querySelector('.box'); box.addEventListener('mouseover', function() { this.style.backgroundColor = 'blue'; // Change color on hover }); box.addEventListener('mouseout', function() { this.style.backgroundColor = 'red'; // Change back when mouse leaves });