web-dev-qa-db-fra.com

Est-il possible de vérifier la présence de null en ligne dans javascript?

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?

5
darkermuffin

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.

3
Nicolas Reynis
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

1
zabusa

.? 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
}
0
vanelizarov

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'));

0
KL_