Nullish coalescing assignment (??=)
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2020.
Toán tử nullish coalescing assignment (??=), còn được gọi là toán tử logical nullish assignment, chỉ tính toán toán hạng bên phải và gán cho toán hạng bên trái nếu toán hạng bên trái là nullish (null hoặc undefined).
Try it
const a = { duration: 50 };
a.speed ??= 25;
console.log(a.speed);
// Expected output: 25
a.duration ??= 10;
console.log(a.duration);
// Expected output: 50
Cú pháp
x ??= y
Mô tả
Nullish coalescing assignment short-circuits, nghĩa là x ??= y tương đương với x ?? (x = y), ngoại trừ biểu thức x chỉ được tính một lần.
Không có phép gán nào được thực hiện nếu toán hạng bên trái không phải nullish, do cơ chế short-circuit của toán tử nullish coalescing. Ví dụ, đoạn mã dưới đây không ném lỗi dù x là const:
const x = 1;
x ??= 2;
Đoạn mã dưới đây cũng không kích hoạt setter:
const x = {
get value() {
return 1;
},
set value(v) {
console.log("Setter called");
},
};
x.value ??= 2;
Thực tế, nếu x không phải nullish thì y hoàn toàn không được tính toán.
const x = 1;
x ??= console.log("y evaluated");
// Logs nothing
Ví dụ
>Sử dụng nullish coalescing assignment
Bạn có thể dùng toán tử nullish coalescing assignment để áp dụng giá trị mặc định cho các thuộc tính của object. So với việc dùng destructuring và giá trị mặc định, ??= cũng áp dụng giá trị mặc định nếu thuộc tính có giá trị null.
function config(options) {
options.duration ??= 100;
options.speed ??= 25;
return options;
}
config({ duration: 125 }); // { duration: 125, speed: 25 }
config({}); // { duration: 100, speed: 25 }
Thông số kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-assignment-operators> |