问题
I have a function which parses the address components of the Google Maps API JSON and then returns the city / locality / route name.
The getAddressComponent() returns a null if it cannot find the key.
let route = getAddressComponent(addressComponents, 'route').value.long_name;
So let's say it didn't find the key, then I get a Error: TypeError: Cannot read property 'long_name' of undefined obviously because it's not defined.
How do I check for null in javascript other than the conditional method (a === null)?
How can I simply check like this with ?
EDIT : Safe Navigation Operator
let route = getAddressComponent(addressComponents, 'route')?.value.long_name;
And if it doesn't exists, it could probably set route to null instead of throwing a Error ?
回答1:
There is no "null-safe navigation operator" in Javascript (EcmaScript 5 or 6), like
?.in C#, Angular templates, etc. (also sometimes called Elvis operator, when written?:) , at least yet, unfortunately.You can test for
nulland return some dependent expression in a single line with the ternary operator?:, as already given in other answers :(use
=== nullto check only fornulls values, and== nullto check fornullandundefined)console.log(myVar == null ? myVar.myProp : 'fallBackValue');in some cases, like yours, when your variable is supposed to hold an
object, you can simply use the fact that any object is truthy whereasnullandundefinedare falsy values :if (myVar) console.log(myVar.myProp) else console.log('fallbackValue')You can test for falsy values by coalescing to boolean with
!!and make this inline :console.log(!!myVar ? myVar.myProp : 'fallbackValue');Be very careful though with this "falsy test", for if your variable is
0,'', orNaN, then it is falsy as well, even though it is not null/undefined.
回答2:
What you want is a null coalescent operator.
Javascript doesn't have one. Most of the time peoples use the logical OR || for this purpose but it doesn't work on property access.
There's proposal for adding null coalescing to the language, but it's nowhere near:
https://github.com/tc39/proposal-nullish-coalescing
https://tc39.github.io/proposal-nullish-coalescing/
If you really, really, absolutly want to use it you can use this Babel plugin:
https://www.npmjs.com/package/babel-plugin-transform-optional-chaining
But I would strongly suggest you don't: this may never make it to the language and you would have unvalid code in your codebase.
回答3:
Code below simplified return num ? num : 0 for me:
return num || 0;
回答4:
let component = getAddressComponent(addressComponents, 'route');
let route = component ? component : null
you can use the ? operator to check the value is true or false then set the value in javascript null will be false
回答5:
For empty strings you can use !:
var foo = 'yo';
console.log(!foo);
var foo = null;
console.log(!foo);
And for the ? you asked about, it's the Conditional (ternary) Operator, the syntax is condition ? if true : if false you can use it as follows:
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'));
回答6:
.? cannot be used in javascript, for that, you might look into typescript.
For example, you can use try...catch construction:
let route
try {
route = getAddressComponent(addressComponents, 'route').value.long_name
} catch (error) {
route = null
}
来源:https://stackoverflow.com/questions/48341869/is-it-possible-to-check-for-null-inline-in-javascript