Chaining Opsional ?.
dan Penggabungan Nullish??
Anda sekarang dapat langsung menggunakan ?.
inline untuk menguji keberadaan dengan aman. Semua browser modern mendukungnya.
??
dapat digunakan untuk menetapkan nilai default jika tidak terdefinisi atau nol.
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
Jika ada properti, ?.
lanjutkan ke pemeriksaan berikutnya, atau mengembalikan nilai yang valid. Kegagalan akan segera terjadi korsleting dan kembali 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
Untuk memastikan nilai standar yang ditentukan, Anda dapat menggunakan ??
. Jika Anda membutuhkan nilai kebenaran pertama, Anda dapat menggunakannya ||
.
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
Jika Anda tidak memeriksa kasus, properti sisi kiri harus ada. Jika tidak, itu akan melempar pengecualian.
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
Dukungan Browser - 78%, Juli 2020
??
Dukungan Browser - 78%
Dokumentasi Mozilla
-
Penugasan nullish yang logis, solusi 2020+
Operator baru sedang ditambahkan ke browser ??=
,, ||=
dan &&=
. Mereka tidak melakukan apa yang Anda cari, tetapi dapat menghasilkan hasil yang sama tergantung pada tujuan kode Anda.
CATATAN: Ini tidak umum di versi browser publik belum , tetapi Babel harus transpile dengan baik. Akan diperbarui jika ketersediaan berubah.
??=
memeriksa apakah sisi kiri tidak terdefinisi atau nol, korsleting jika sudah ditentukan. Jika tidak, sisi kiri diberi nilai sisi kanan. ||=
dan &&=
serupa, tetapi didasarkan pada ||
dan &&
operator.
Contoh dasar
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
Contoh Obyek / Array
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" }
Dukungan Browser Juli 2020 - .03%
Dokumentasi Mozilla
if( obj?.nested?.property?.value )
alih-alihif( obj && obj.nested && obj.nested.property && obj.nested.property.value )