Bỏ qua để đến nội dung

Default Parameters (Tham Số Mặc Định)

Tự động dùng giá trị mặc định khi đối số là undefined. Giá trị mặc định được tính lúc gọi hàm, từ trái → phải.


function fn(param = defaultValue) { ... }

function greet(name = 'friend') {
return `Hi, ${name}!`;
}
greet(); // "Hi, friend!" (không truyền → undefined → dùng default)
greet(undefined); // "Hi, friend!" (undefined → dùng default)
greet(null); // "Hi, null!" (null ≠ undefined → KHÔNG dùng default)
greet(''); // "Hi, !" ('' ≠ undefined → KHÔNG dùng default)


// Lỗi khi truyền falsy hợp lệ (0, "", false)
function old(x) {
x = x || 10; // 0 cũng bị thay bằng 10!
}
old(0); // x = 10 ← sai!
old(""); // x = 10 ← sai!

Tham số default nằm trong scope riêng và bị TDZ — không thể tham chiếu tham số phía sau mình:

// ❌ ReferenceError — b chưa khai báo tại thời điểm tính a
function bad(a = b, b = 1) {}
bad(); // ReferenceError
// ✅ OK — a đã khai báo trước b
function ok(a = 1, b = a) {}
ok(); // a = 1, b = 1

Default ở cuối

Đặt tham số có default sau tham số bắt buộc:

// ✅ Rõ ràng
function api(url, method = 'GET') {}
// ❌ Khó dùng — phải truyền undefined để skip
function bad(method = 'GET', url) {}
bad(undefined, '/users');

Object cho nhiều tuỳ chọn

Khi có > 2 default → dùng object parameter:

function fetch(url, {
method = 'GET',
headers = {},
body = null,
timeout = 5000,
} = {}) {
// ...
}

Đặc điểmChi tiết
Cú phápparam = defaultValue
Kích hoạtChỉ khi undefined
Thứ tự tínhTrái → phải
TDZKhông thể tham chiếu tham số phía sau
fn.lengthĐếm đến default đầu tiên rồi dừng