Default Parameters
Default Parameters
Section titled “Default Parameters”What it is
Section titled “What it is”Default parameters allow function parameters to have default values when no argument is provided or undefined is passed. Introduced in ES6 (2015).
Before this feature
Section titled “Before this feature”Had to manually check for undefined values:
function greet(name, greeting) { name = name || "Guest"; greeting = greeting || "Hello"; return greeting + ", " + name + "!";}
// Problem: falsy values trigger defaultfunction setValue(value, active) { active = active || true; // Bad! false becomes true return { value, active };}setValue(10, false); // { value: 10, active: true } - wrong!After this feature
Section titled “After this feature”Clean, declarative default values:
function greet(name = "Guest", greeting = "Hello") { return `${greeting}, ${name}!`;}
greet(); // "Hello, Guest!"greet("Alice"); // "Hello, Alice!"greet("Bob", "Hi"); // "Hi, Bob!"greet(undefined, "Hey"); // "Hey, Guest!"
// Default can be any expressionfunction createId(prefix = "ID", timestamp = Date.now()) { return `${prefix}-${timestamp}`;}
// Defaults can reference earlier parametersfunction calculateArea(width, height = width) { return width * height;}calculateArea(5); // 25 (square)calculateArea(5, 3); // 15 (rectangle)
// Default with destructuringfunction createUser({ name = "Guest", age = 0, premium = false} = {}) { return { name, age, premium };}
createUser(); // { name: "Guest", age: 0, premium: false }createUser({ name: "Alice", age: 25 }); // { name: "Alice", age: 25, premium: false }Why this is better
Section titled “Why this is better”- Declarative: Intent is clear from signature
- Safe: Proper handling of falsy values
- Flexible: Defaults can be expressions or reference other parameters
- Readable: No manual undefined checks
- DRY: Avoid repetitive validation code
Key notes / edge cases
Section titled “Key notes / edge cases”- Only
undefinedtriggers default (notnull) - Defaults evaluated at call time, not definition time
- Can reference earlier parameters but not later ones
- Works with destructuring in parameters
- Rest parameters can’t have defaults
// null doesn't trigger defaultfunction test(x = 5) { return x;}test(undefined); // 5test(null); // null (not 5!)
// Evaluated at call timelet counter = 0;function increment(value = counter++) { return value;}increment(); // 0increment(); // 1increment(); // 2
// Can't reference later parametersfunction bad(a = b, b = 1) { // ReferenceError return a + b;}
// Rest parameters can't have defaultsfunction invalid(...args = []) {} // SyntaxErrorQuick practice
Section titled “Quick practice”-
Create a function
multiplywith default multiplier of 2Answer
function multiply(x, multiplier = 2) {return x * multiplier;} -
What does
f(x = 10, y = x * 2)do?Answer
Sets `x` default to 10, and `y` default to `x * 2`. If called as `f()`, returns `x=10, y=20`. -
Does
nulltrigger default parameters?Answer
No. Only `undefined` (or omitted argument) triggers defaults. `null` is passed as-is.