2020 Çözümü ?.
ve??
Artık ?.
varlığını güvenli bir şekilde test etmek için doğrudan satır içi (İsteğe Bağlı Zincirleme) kullanabilirsiniz . Tüm modern tarayıcılar bunu destekler.
??
(Nullish Coalescing), undefined veya null ise varsayılan bir değer ayarlamak için kullanılabilir.
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
Bir özellik mevcutsa, bir ?.
sonraki kontrole geçer veya geçerli değeri döndürür. Herhangi bir arıza anında kısa devre yapacak ve geri dönecektir undefined
.
const example = {a: ["first", {b:3}, false]}
example?.a
example?.b
example?.a?.[0]
example?.a?.[1]?.a
example?.a?.[1]?.b
domElement?.parentElement?.children?.[3]?.nextElementSibling
null?.()
validFunction?.()
(() => {return 1})?.()
Varsayılan tanımlı bir değer sağlamak için kullanabilirsiniz ??
. İlk gerçek değere ihtiyacınız varsa, kullanabilirsiniz ||
.
example?.c ?? "c"
example?.c || "c"
example?.a?.[2] ?? 2
example?.a?.[2] || 2
Bir vakayı kontrol etmezseniz, sol taraf özelliği mevcut olmalıdır. Aksi takdirde, bir istisna atacaktır.
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
Tarayıcı Desteği -% 82, Ekim 2020
??
Tarayıcı Desteği -% 82
Mozilla Belgeleri
-
Mantıksal sıfır atama, 2020+ çözümü
Yeni operatörleri şu anda tarayıcılar, ekleniyor ??=
, ||=
ve &&=
. Tam olarak aradığınız şeyi yapmazlar, ancak kodunuzun amacına bağlı olarak aynı sonuca yol açabilir.
NOT: Bunlar henüz genel tarayıcı sürümlerinde yaygın değildir , ancak Babel iyi bir şekilde aktarılmalıdır. Kullanılabilirlik değiştikçe güncellenecek.
??=
sol tarafın tanımsız veya boş olup olmadığını kontrol eder, önceden tanımlanmışsa kısa devre yapar. Değilse, sol tarafa sağ taraf değeri atanır. ||=
ve &&=
benzerdir, ancak ||
ve &&
operatörlerine dayalıdır .
Temel Örnekler
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
Nesne / Dizi Örnekleri
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" }
Tarayıcı Desteği Ekim 2020 -% 70
Mozilla Belgeleri
if( obj?.nested?.property?.value )
yerineif( obj && obj.nested && obj.nested.property && obj.nested.property.value )