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 x là undefined. 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