Chaînage ?.
et coalescence nul en option??
Vous pouvez maintenant utiliser directement en ?.
ligne pour tester en toute sécurité l'existence. Tous les navigateurs modernes le prennent en charge.
??
peut être utilisé pour définir une valeur par défaut si non définie ou nulle.
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
Si une propriété existe, ?.
passe à la vérification suivante ou renvoie la valeur valide. Toute panne sera immédiatement court-circuitée et retournée 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
Pour garantir une valeur définie par défaut, vous pouvez utiliser ??
. Si vous avez besoin de la première valeur de vérité, vous pouvez utiliser ||
.
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
Si vous ne cochez pas de cas, la propriété de gauche doit exister. Sinon, il lèvera une exception.
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
Support du navigateur - 78%, juillet 2020
??
Prise en charge du navigateur - 78%
Documentation Mozilla
-
Affectation logique nulle, solution 2020+
De nouveaux opérateurs sont actuellement ajoutés aux navigateurs ??=
, ||=
et &&=
. Ils ne font pas tout à fait ce que vous recherchez, mais pourraient conduire au même résultat en fonction de l'objectif de votre code.
NOTE: Ce ne sont pas communs dans les versions de navigateur publics encore , mais Babel devraient transpile bien. Sera mis à jour à mesure que la disponibilité change.
??=
vérifie si le côté gauche est indéfini ou nul, court-circuit s'il est déjà défini. Sinon, le côté gauche reçoit la valeur du côté droit. ||=
et &&=
sont similaires, mais basés sur les opérateurs ||
et &&
.
Exemples de base
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
Exemples d'objets / de tableaux
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" }
Browser Support Juillet 2020 - .03%
Documentation Mozilla
if( obj?.nested?.property?.value )
au lieu deif( obj && obj.nested && obj.nested.property && obj.nested.property.value )