Nhảy tới nội dung

Default parameter

Default parameter cho phép chỉ định giá trị thay thế khi giá trị của tham số là undefined.

Cú pháp default parameter

Trong JavaScript, default parameter được viết bằng cách thêm = và giá trị mặc định bên phải tham số.

js
// Function declaration
function tên_function(tham_số = giá_trị_mặc_định) {}
// Arrow function
(tham_số = giá_trị_mặc_định) => {};
js
// Function declaration
function tên_function(tham_số = giá_trị_mặc_định) {}
// Arrow function
(tham_số = giá_trị_mặc_định) => {};

Trong TypeScript, khi viết cả type annotation và default parameter, type annotation được viết trước.

ts
// Function declaration
function tên_function(tham_số: Kiểu = giá_trị_mặc_định) {}
// Arrow function
(tham_số: Kiểu = giá_trị_mặc_định) => {};
ts
// Function declaration
function tên_function(tham_số: Kiểu = giá_trị_mặc_định) {}
// Arrow function
(tham_số: Kiểu = giá_trị_mặc_định) => {};

Giá trị mặc định được sử dụng khi là undefined

Trong JavaScript, khi bỏ qua tham số, nó sẽ trở thành undefined.

js
function foo(x) {
console.log(x);
}
foo();
undefined
js
function foo(x) {
console.log(x);
}
foo();
undefined

Default parameter sẽ được gán giá trị thay thế khi tham số là undefined. Ví dụ, trong lời gọi function sau, không truyền tham số nên xundefined. Do đó, giá trị mặc định 1 được gán.

ts
function foo(x = 1) {
console.log(x);
}
foo();
1
ts
function foo(x = 1) {
console.log(x);
}
foo();
1

Khi truyền undefined làm tham số như sau, giá trị mặc định cũng được gán.

ts
foo(undefined);
1
ts
foo(undefined);
1

Lưu ý rằng khi tham số là null, default parameter không được áp dụng.

js
function foo(x = 1) {
console.log(x);
}
foo(null);
null
js
function foo(x = 1) {
console.log(x);
}
foo(null);
null

Có thể viết ở giữa danh sách tham số

Trong JavaScript, default parameter có thể được viết trước các tham số không có giá trị mặc định.

js
function foo(x, y = 2, z) {
console.log(x, y, z);
}
foo(1, undefined, 3);
1 2 3
js
function foo(x, y = 2, z) {
console.log(x, y, z);
}
foo(1, undefined, 3);
1 2 3

Có thể viết logic khởi tạo

Trong JavaScript, bạn có thể viết expression làm giá trị mặc định.

js
function foo(x = 2 * 2) {}
js
function foo(x = 2 * 2) {}

Vì có thể viết expression, nên cũng có thể viết lời gọi function.

js
function foo(x = parseInt("1.5")) {}
js
function foo(x = parseInt("1.5")) {}

Không thể viết xử lý không đồng bộ

Tuy nhiên, bạn không thể viết xử lý gọi async function bằng cách sử dụng await.

ts
async function foo(x = await Promise.resolve(1)) {}
'await' expressions cannot be used in a parameter initializer.2524'await' expressions cannot be used in a parameter initializer.
ts
async function foo(x = await Promise.resolve(1)) {}
'await' expressions cannot be used in a parameter initializer.2524'await' expressions cannot be used in a parameter initializer.

Type inference hoạt động

Trong TypeScript, khi có default parameter, type inference cho tham số sẽ hoạt động. Do đó, bạn có thể bỏ qua type annotation khi có default parameter.

ts
function foo(x = 1) {}
(parameter) x: number
ts
function foo(x = 1) {}
(parameter) x: number
Chia sẻ kiến thức

・Default parameter trong JavaScript là giá trị được sử dụng khi tham số là undefined
・Cú pháp: function tênđịnh) {}
・Không trở thành giá trị mặc định khi là null
・Có thể viết ở giữa danh sách tham số
・Cũng có thể viết logic khởi tạo đơn giản
・Trong TypeScript, type inference hoạt động

Từ 『Survival TypeScript』

Đăng nội dung này lên X