Is it possible to check for null inline in javascript?

会有一股神秘感。 提交于 2020-01-24 02:16:26

问题


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 null and return some dependent expression in a single line with the ternary operator ?:, as already given in other answers :

    (use === null to check only for nulls values, and == null to check for null and undefined)

    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 whereas null and undefined are 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, '', or NaN, 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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!