ES6+ Features Explained
Key Concepts
- Arrow Functions
- Template Literals
- Destructuring
- Spread and Rest Operators
- Default Parameters
- Classes
Arrow Functions
Arrow functions provide a concise syntax for writing function expressions. They automatically bind the this
value to the surrounding context.
Example:
let add = (a, b) => a + b; console.log(add(2, 3)); // Outputs: 5
Analogies: Think of arrow functions as shorthand for writing functions, similar to using abbreviations in everyday language.
Template Literals
Template literals allow for embedding expressions inside string literals using backticks () and placeholders (${expression}).
Example:
let name = "Alice"; let greeting = Hello, ${name}!; console.log(greeting); // Outputs: Hello, Alice!
Analogies: Template literals are like customizable greeting cards where you can insert names and messages dynamically.
Destructuring
Destructuring allows for unpacking values from arrays or properties from objects into distinct variables.
Example:
let [x, y] = [1, 2]; console.log(x); // Outputs: 1 console.log(y); // Outputs: 2 let {name, age} = {name: "Bob", age: 30}; console.log(name); // Outputs: Bob console.log(age); // Outputs: 30
Analogies: Destructuring is like opening a gift box and immediately knowing what each item is, without having to look inside one by one.
Spread and Rest Operators
The spread operator (...
) allows an iterable to be expanded in places where zero or more arguments are expected. The rest operator collects multiple elements into a single array.
Example:
let numbers = [1, 2, 3]; let moreNumbers = [...numbers, 4, 5]; console.log(moreNumbers); // Outputs: [1, 2, 3, 4, 5] function sum(...args) { return args.reduce((a, b) => a + b, 0); } console.log(sum(1, 2, 3)); // Outputs: 6
Analogies: The spread operator is like spreading out a deck of cards, while the rest operator is like collecting a hand of cards.
Default Parameters
Default parameters allow functions to have default values for parameters that are not provided when the function is called.
Example:
function greet(name = "Guest") { return Hello, ${name}!; } console.log(greet()); // Outputs: Hello, Guest! console.log(greet("Alice")); // Outputs: Hello, Alice!
Analogies: Default parameters are like having a backup plan in case something goes wrong, ensuring a function can still work even with missing inputs.
Classes
Classes provide a syntactic sugar over JavaScript's existing prototype-based inheritance, making it easier to create objects and deal with inheritance.
Example:
class Animal { constructor(name) { this.name = name; } speak() { console.log(${this.name} makes a noise.); } } class Dog extends Animal { speak() { console.log(${this.name} barks.); } } let dog = new Dog("Rex"); dog.speak(); // Outputs: Rex barks.
Analogies: Classes are like blueprints for creating objects. Just as a blueprint defines the structure of a building, a class defines the structure of an object.