Why JavaScript?
JavaScript runs everywhere:
- Web browsers
- Node.js servers
- Many automation tools
- Universal scripting
Basic Syntax
Variables
const name = "Alice"; // Constant
let age = 30; // Mutable
var old = "avoid"; // Legacy, avoid
// const for most things, let when you need to reassign
Data Types
// Primitives
const str = "hello";
const num = 42;
const bool = true;
const nothing = null;
const notDefined = undefined;
// Objects
const obj = { name: "Alice", age: 30 };
const arr = [1, 2, 3];
Strings
const s = "Hello, World";
s.toLowerCase(); // "hello, world"
s.toUpperCase(); // "HELLO, WORLD"
s.split(", "); // ["Hello", "World"]
s.replace("o", "0"); // "Hell0, World"
s.startsWith("He"); // true
s.includes("World"); // true
s.length; // 12
// Template literals
const name = "Alice";
`Hello, ${name}!`; // "Hello, Alice!"
Arrays
const items = [1, 2, 3, 4, 5];
items[0]; // 1
items[items.length - 1]; // 5
items.slice(1, 3); // [2, 3]
items.push(6); // Add to end
items.pop(); // Remove from end
items.includes(3); // true
items.length; // 5
// Iteration
items.forEach(x => console.log(x));
items.map(x => x * 2); // [2, 4, 6, 8, 10]
items.filter(x => x > 2); // [3, 4, 5]
items.find(x => x > 2); // 3
items.reduce((a, b) => a + b, 0); // 15
Objects
const user = {
name: "Alice",
age: 30
};
user.name; // "Alice"
user["name"]; // "Alice"
user.email; // undefined
user.email = "a@b.com"; // Add property
Object.keys(user); // ["name", "age", "email"]
Object.values(user); // ["Alice", 30, "a@b.com"]
// Destructuring
const { name, age } = user;
// Spread
const copy = { ...user };
const merged = { ...user, role: "admin" };
Control Flow
If/Else
if (age < 18) {
console.log("Minor");
} else if (age < 65) {
console.log("Adult");
} else {
console.log("Senior");
}
Ternary
const status = age >= 18 ? "adult" : "minor";
Loops
// For
for (let i = 0; i < 5; i++) {
console.log(i);
}
// For...of (arrays)
for (const item of items) {
console.log(item);
}
// For...in (object keys)
for (const key in user) {
console.log(key, user[key]);
}
// While
let count = 0;
while (count < 5) {
console.log(count);
count++;
}
Functions
Function Declaration
function greet(name) {
return `Hello, ${name}!`;
}
Arrow Functions
const greet = (name) => `Hello, ${name}!`;
// Multiple statements
const process = (data) => {
const result = transform(data);
return result;
};
Default Parameters
function greet(name, greeting = "Hello") {
return `${greeting}, ${name}!`;
}
Rest Parameters
function sum(...numbers) {
return numbers.reduce((a, b) => a + b, 0);
}
sum(1, 2, 3, 4); // 10
Async/Await
// Promise-based
fetch(url)
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
// Async/await
async function getData() {
try {
const res = await fetch(url);
const data = await res.json();
return data;
} catch (err) {
console.error(err);
}
}
Classes
class User {
constructor(name, email) {
this.name = name;
this.email = email;
}
greet() {
return `Hello, I'm ${this.name}`;
}
}
const user = new User("Alice", "alice@example.com");
user.greet(); // "Hello, I'm Alice"
Modules
Export
// Named exports
export const name = "Alice";
export function greet() { }
// Default export
export default class User { }
Import
import User from './user.js';
import { name, greet } from './utils.js';
import * as utils from './utils.js';
Common Patterns
Nullish Coalescing
const value = input ?? "default";
// Uses "default" only if input is null/undefined
Optional Chaining
const street = user?.address?.street;
// Returns undefined instead of throwing if any is null
Spread Operator
// Arrays
const combined = [...arr1, ...arr2];
// Objects
const merged = { ...obj1, ...obj2 };
Destructuring
// Arrays
const [first, second] = [1, 2];
// Objects
const { name, age } = user;
// With rename
const { name: userName } = user;
Error Handling
try {
riskyOperation();
} catch (error) {
console.error(error.message);
} finally {
cleanup();
}
// Throwing
throw new Error("Something went wrong");
Useful Methods
// JSON
JSON.parse('{"name":"Alice"}');
JSON.stringify({ name: "Alice" });
// Array methods
[1, 2, 3].join(", "); // "1, 2, 3"
Array.isArray([1, 2, 3]); // true
// Object methods
Object.assign({}, obj1, obj2);
Object.entries(obj); // [[key, value], ...]
Conclusion
JavaScript essentials:
- Modern syntax (const/let, arrow functions)
- Powerful array methods
- Async/await for promises
- Object destructuring and spread
- Runs everywhere
Master these for effective JS work.
Next: TypeScript Basics - Type-safe JavaScript