JavaScript never checks argument counts: missing ones are undefined, extras are ignored — defaults, rest parameters and destructuring make that manageable.
Missing and extra arguments
function show(a, b) {
console.log(a, b, arguments.length);
}
show(1);
show(1, 2, 3);1 undefined 1
1 2 3Default parameters
function greet(name = "guest", greeting = `Hello, ${name}`) {
return greeting;
}
console.log(greet());
console.log(greet("Asha"));
console.log(greet(undefined, "Hey")); // undefined triggers the default
console.log(greet(null)); // null does notHello, guest
Hello, Asha
Hey
Hello, nullfunction append(item, list = []) {
list.push(item);
return list;
}
console.log(append(1), append(2));
let counter = 0;
const next = (id = ++counter) => id;
console.log(next(), next(), next(99), next());[ 1 ] [ 2 ]
1 2 99 3Rest parameters vs arguments
function oldStyle() {
console.log(Array.isArray(arguments), Array.from(arguments));
}
function modern(first, ...rest) {
console.log(first, rest, Array.isArray(rest));
}
oldStyle(1, 2);
modern(1, 2, 3);
modern(1);false [ 1, 2 ]
1 [ 2, 3 ] true
1 [] truearguments | ...rest | |
|---|---|---|
| Type | Array-like object (no map) | Real array |
| In arrow functions | Not available | Works |
| Contains | All arguments | Only the remaining ones |
| Position | — | Must be the last parameter |
Named options via destructuring
function createUser({ name, role = "viewer", active = true } = {}) {
return `${name} (${role}${active ? "" : ", inactive"})`;
}
console.log(createUser({ name: "Ravi" }));
console.log(createUser({ name: "Mei", role: "admin", active: false }));
console.log(createUser());Ravi (viewer)
Mei (admin, inactive)
undefined (viewer)What is the arguments object?