J'ai une fonction qui analyse les composants d'adresse de l'API Google Maps JSON
, puis renvoie le nom de la ville, de la localité ou de la route.
getAddressComponent()
renvoie une null
s'il ne peut pas trouver la clé.
let route = getAddressComponent(addressComponents, 'route').value.long_name;
Alors disons que la clé n'a pas été trouvée, alors j'obtiens un Error: TypeError: Cannot read property 'long_name' of undefined
évidemment parce que ce n'est pas défini.
Comment vérifier null
en javascript autre que la méthode conditionnelle (a === null)
?
Comment puis-je simplement vérifier comme ça avec ?
EDIT: Opérateur de navigation sécurisée
let route = getAddressComponent(addressComponents, 'route')?.value.long_name;
Et s'il n'existe pas, il pourrait probablement définir route
à null
au lieu de générer une erreur?
Ce que vous voulez, c'est un opérateur null coalescent . Javascript n'en a pas. La plupart du temps, les peuples utilisent le OR ||
logique à cette fin, mais cela ne fonctionne pas avec l'accès aux propriétés.
Il y a une proposition pour ajouter une fusion nulle à la langue, mais c'est loin d'être: https://github.com/tc39/proposal-nullish-coalescing
https://tc39.github.io/proposal-nullish-coalescing/
Si vous voulez vraiment vraiment l'utiliser, vous pouvez utiliser le plugin Babel suivant: https://www.npmjs.com/package/babel-plugin-transform-optional-chaining
Mais je vous conseillerais fortement de ne pas le faire: cela pourrait ne jamais arriver à la langue et vous auriez du code non valide dans votre base de code.
let component = getAddressComponent(addressComponents, 'route');
let route = component ? component : null
vous pouvez utiliser l'opérateur ?
pour vérifier que la valeur est true
ou false
puis définir la valeur en javascript null
sera false
.?
ne peut pas être utilisé en javascript. Pour cela, vous pouvez regarder dans TypeScript.
Par exemple, vous pouvez utiliser la construction try...catch
:
let route
try {
route = getAddressComponent(addressComponents, 'route').value.long_name
} catch (error) {
route = null
}
Pour les chaînes vides, vous pouvez utiliser !
:
var foo = 'yo';
console.log(!foo);
var foo = null;
console.log(!foo);
Et pour le ?
que vous avez demandé, il s’agit de l’opérateur Conditionnel (ternaire) , la syntaxe est condition ? if true : if false
.
var foo = 'yo';
console.log('1 : ' + (!foo ? 'Null' : 'Not Null'));
console.log('2 : ' + (foo === null ? 'Null' : 'Not Null'));
console.log('3 : ' + (foo == null ? 'Null' : 'Not Null'));
var foo = null;
console.log('1 : ' + (!foo ? 'Null' : 'Not Null'));
console.log('2 : ' + (foo === null ? 'Null' : 'Not Null'));
console.log('3 : ' + (foo == null ? 'Null' : 'Not Null'));