📦 Variables (let, const, var)
<script>
// var → function scoped (old way)
// let → block scoped (modern)
// const → cannot be reassigned
var a = 10;
let b = 20;
const c = 30;
console.log(a, b, c);
</script>
💡 Tip: Beginners: prefer let
& const
. Advanced: use const
by default unless reassignment is required.
⚡ Functions (Normal & Arrow)
<script>
// Regular function
function greet(name) {
return "Hello " + name;
}
// Arrow function
const greetArrow = (name) => `Hello ${name}`;
console.log(greet("Maxon"));
console.log(greetArrow("Poll"));
</script>
💡 Tip: Beginners: start with normal functions. Advanced: use arrow functions for callbacks & concise code.
🌐 DOM Manipulation
<div id="box">Hello</div>
<script>
document.getElementById("box").style.color = "red";
document.querySelector("#box").textContent = "Changed!";
</script>
💡 Tip: Beginners: use getElementById
. Advanced: prefer querySelector
for flexibility.
🎯 Events
<button id="btn">Click Me</button>
<script>
document.getElementById("btn").addEventListener("click", () => {
alert("Button Clicked!");
});
</script>
💡 Tip: Beginners: use onclick
. Advanced: always use addEventListener
for multiple events.
🔁 Loops
<script>
const fruits = ["🍎","🍌","🍊"];
// for loop
for (let i=0; i<fruits.length; i++) {
console.log(fruits[i]);
}
// for..of
for (const fruit of fruits) {
console.log(fruit);
}
// forEach
fruits.forEach(f => console.log(f));
</script>
💡 Tip: Beginners: start with for
. Advanced: use forEach
, map()
, reduce()
.
📘 Objects
<script>
const user = {
name: "Maxon",
age: 25,
greet() {
console.log(`Hi, I'm ${this.name}`);
}
};
console.log(user.name);
user.greet();
</script>
💡 Tip: Beginners: objects store related data. Advanced: learn destructuring & object shorthand.
📚 Arrays & Methods
<script>
const numbers = [1,2,3,4,5];
console.log(numbers.map(n => n*2)); // [2,4,6,8,10]
console.log(numbers.filter(n => n%2===0)); // [2,4]
console.log(numbers.reduce((a,b) => a+b, 0)); // 15
</script>
💡 Tip: Beginners: use push
, pop
. Advanced: master map()
, filter()
, reduce()
.
⏳ Async / Await
<script>
async function fetchData() {
try {
let res = await fetch("https://jsonplaceholder.typicode.com/posts/1");
let data = await res.json();
console.log(data);
} catch(err) {
console.error("Error:", err);
}
}
fetchData();
</script>
💡 Tip: Beginners: start with Promise.then()
. Advanced: prefer async/await
for cleaner async code.
🚀 ES6+ Features
<script>
// Template literals
const name = "Maxon";
console.log(`Hello, ${name}!`);
// Destructuring
const person = { age: 22, country: "India" };
const { age, country } = person;
// Spread & Rest
const nums = [1,2,3];
const more = [...nums, 4,5];
function sum(...args) { return args.reduce((a,b)=>a+b); }
console.log(sum(1,2,3,4));
</script>
💡 Tip: Beginners: start with let
/const
. Advanced: use destructuring, spread, rest, template strings.
🏗️ Classes (OOP in JS)
<script>
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound`);
}
}
class Dog extends Animal {
speak() {
console.log(`${this.name} barks!`);
}
}
const d = new Dog("Rocky");
d.speak();
</script>
💡 Tip: Beginners: classes are blueprints. Advanced: use inheritance & static methods.
⚡ Debounce (Performance)
<input type="text" id="search" placeholder="Type here...">
<script>
function debounce(func, delay) {
let timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), delay);
};
}
const handleSearch = debounce((e) => {
console.log("Searching:", e.target.value);
}, 500);
document.getElementById("search").addEventListener("input", handleSearch);
</script>
💡 Tip: Pro: Use debounce for search boxes, API calls, resize events.
⚡ Throttle (Performance)
<script>
function throttle(func, limit) {
let inThrottle;
return function(...args) {
if (!inThrottle) {
func.apply(this, args);
inThrottle = true;
setTimeout(() => inThrottle = false, limit);
}
};
}
window.addEventListener("scroll", throttle(() => {
console.log("Scroll event!");
}, 1000));
</script>
💡 Tip: Pro: Throttle limits function execution rate (e.g., scroll, mousemove).
💾 LocalStorage
<script>
// Save
localStorage.setItem("theme", "dark");
// Get
console.log(localStorage.getItem("theme"));
// Remove
localStorage.removeItem("theme");
// Clear all
localStorage.clear();
</script>
💡 Tip: Beginners: use for simple persistence. Pro: wrap in functions for structured storage (objects via JSON).
📦 JavaScript Modules (ES6)
// file: utils.js
export function greet(name) {
return `Hello, ${name}`;
}
// file: app.js
import { greet } from "./utils.js";
console.log(greet("Maxon"));
💡 Tip: Pro: Organize reusable code with ES6 modules. Use bundlers (Vite, Webpack) for larger apps.
🌐 Fetch API
<script>
// GET request
fetch("https://jsonplaceholder.typicode.com/posts/1")
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
// POST request
fetch("https://jsonplaceholder.typicode.com/posts", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ title: "New Post", body: "Hello" })
});
</script>
💡 Tip: Beginners: use GET. Pro: handle errors, retries, and async/await.
🚨 Error Handling
<script>
try {
let num = 10 / 0;
throw new Error("Custom error message");
} catch (err) {
console.error("Caught:", err.message);
} finally {
console.log("Always runs");
}
</script>
💡 Tip: Pro: Always use try...catch
in async code. Use custom error classes for complex apps.
📘 Set & Map
<script>
// Set (unique values)
const mySet = new Set([1,2,2,3]);
console.log(mySet); // {1,2,3}
// Map (key-value pairs)
const myMap = new Map();
myMap.set("name", "Maxon");
myMap.set("age", 25);
console.log(myMap.get("name"));
</script>
💡 Tip: Pro: Use Set
for unique values, Map
for key-value storage (better than objects when keys aren’t strings).
🔗 Promises
<script>
const asyncTask = new Promise((resolve, reject) => {
setTimeout(() => resolve("Done!"), 2000);
});
asyncTask
.then(msg => console.log(msg))
.catch(err => console.error(err));
</script>
💡 Tip: Beginners: understand async execution. Pro: chain multiple promises or use Promise.all
.
⚙️ Generators
<script>
function* counter() {
yield 1;
yield 2;
yield 3;
}
const gen = counter();
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
</script>
💡 Tip: Pro: Use generators for custom iterators & lazy evaluation.
🕵️ Proxy
<script>
const target = { message: "Hello" };
const handler = {
get(obj, prop) {
return prop in obj ? obj[prop] : "Not Found";
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.message); // Hello
console.log(proxy.unknown); // Not Found
</script>
💡 Tip: Pro: Use Proxy for validation, logging, or reactive frameworks (Vue.js uses this internally).