Tùy chọn Chaining ?.
và Nullish Coalescing??
Bây giờ bạn có thể trực tiếp sử dụng ?.
nội tuyến để kiểm tra sự tồn tại một cách an toàn. Tất cả các trình duyệt hiện đại đều hỗ trợ nó.
??
có thể được sử dụng để đặt giá trị mặc định nếu không xác định hoặc null.
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
Nếu một tài sản tồn tại, ?.
tiến hành kiểm tra tiếp theo hoặc trả về giá trị hợp lệ. Bất kỳ thất bại sẽ ngay lập tức ngắn mạch và trở lại undefined
.
const example = {a: ["first", {b:3}, false]}
example?.a // ["first", {b:3}, false]
example?.b // undefined
example?.a?.[0] // "first"
example?.a?.[1]?.a // undefined
example?.a?.[1]?.b // 3
domElement?.parentElement?.children?.[3]?.nextElementSibling
null?.() // undefined
validFunction?.() // result
(() => {return 1})?.() // 1
Để đảm bảo giá trị được xác định mặc định, bạn có thể sử dụng ??
. Nếu bạn yêu cầu giá trị trung thực đầu tiên, bạn có thể sử dụng ||
.
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
Nếu bạn không kiểm tra trường hợp, thuộc tính bên trái phải tồn tại. Nếu không, nó sẽ ném một ngoại lệ.
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
Hỗ trợ trình duyệt - 78%, tháng 7 năm 2020
??
Hỗ trợ trình duyệt - 78%
Tài liệu Mozilla
-
Phân công logic nullish, giải pháp 2020+
Các nhà khai thác mới hiện đang được thêm vào các trình duyệt ??=
, ||=
và &&=
. Họ không làm những gì bạn đang tìm kiếm, nhưng có thể dẫn đến kết quả tương tự tùy thuộc vào mục tiêu của mã của bạn.
Chú ý: Đây không phải là phổ biến ở các phiên bản trình duyệt nào được nêu ra , nhưng Babel nên transpile tốt. Sẽ cập nhật khi thay đổi sẵn có.
??=
kiểm tra nếu bên trái là không xác định hoặc null, ngắn mạch nếu đã được xác định. Nếu không, bên trái được gán giá trị bên phải. ||=
và &&=
tương tự, nhưng dựa trên ||
và các &&
nhà khai thác.
Ví dụ cơ bản
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
Ví dụ đối tượng / mảng
let x = ["foo"]
let y = { foo: "fizz" }
x[0] ??= "bar" // "foo"
x[1] ??= "bar" // "bar"
y.foo ??= "buzz" // "fizz"
y.bar ??= "buzz" // "buzz"
x // Array [ "foo", "bar" ]
y // Object { foo: "fizz", bar: "buzz" }
Hỗ trợ trình duyệt tháng 7 năm 2020 - 0,03%
Tài liệu Mozilla
if( obj?.nested?.property?.value )
thay vìif( obj && obj.nested && obj.nested.property && obj.nested.property.value )