Chuyển đến nội dung chính
Mô-đun 4 · Bài học 3 trong tổng số 415/32 trong khóa học~12 min
Bài học theo mô-đun (3/4)

Thông số mặc định và còn lại

JavaScript cho phép bạn tạo các tham số tùy chọn (với giá trị mặc định) và chấp nhận số biến đối số với toán tử còn lại (...).

Thông số mặc định

JS
function saluta(nome, prefisso = 'Ciao') {
  return `${prefisso}, ${nome}!`;
}

saluta('Anna'); // 'Ciao, Anna!'
saluta('Marco', 'Buongiorno'); // 'Buongiorno, Marco!'

Giá trị mặc định chỉ áp dụng khi đối số là undefined (bao gồm cả trường hợp "không được thông qua"). Đối với null hoặc 0, mặc định không có tác dụng:

JS
function f(x = 10) {
  return x;
}
f(); // 10
f(undefined); // 10
f(null); // null
f(0); // 0

Nghỉ ngơi: ...names

Để chấp nhận số lượng đối số thay đổi, hãy tập hợp chúng thành một mảng với ...:

JS
function somma(...numeri) {
  let totale = 0;
  for (const n of numeri) totale += n;
  return totale;
}

somma(); // 0
somma(5); // 5
somma(1, 2, 3, 4); // 10

Bên trong hàm, numeri là một mảng thực (không phải đối tượng arguments kỳ diệu của các hàm cũ).

Phần còn lại phải là tham số cuối cùng:

JS
function f(primo, ...altri) {
  /* ok */
}
// function f(...altri, ultimo) {} // SyntaxError

Lan tỏa vào thời điểm cuộc gọi

Mặt khác của ... là toán tử ** lây lan**, toán tử này "làm nổ" một mảng thành các đối số riêng biệt tại thời điểm gọi:

JS
function somma(a, b, c) {
  return a + b + c;
}

const nums = [1, 2, 3];
somma(...nums); // 6, equivalent to somma(1, 2, 3)

Hãy thử nó

tập thể dục#js.m4.l3.e1
Nỗ lực: 0Đang tải…

Xác định hàm `sum(a, b)` trong đó `b` có giá trị mặc định là 0. Nó phải vượt qua các xác nhận sau: sum(5) === 5, sum(2, 3) === 5, sum(0) === 0.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

hàm sum(a, b = 0) { return a + b; }

Giải pháp khả dụng sau 3 lần thử

Xem lại bài tập

tập thể dục#js.m4.l3.e2
Nỗ lực: 0Đang tải…

Xác định hàm `mean(...nums)` trả về giá trị trung bình số học của các đối số của nó hoặc 0 nếu không có đối số nào được truyền.

Đang tải trình chỉnh sửa…
Hiển thị gợi ý

Nếu nums.length là 0, trả về 0; nếu không thì tính tổng và chia.

Giải pháp khả dụng sau 3 lần thử