In ngIf need to return a boolean from object value.
var a = {"c" : "b","f": "g"}
a["c"] => 'b'
(a && a["c"]) => 'b' // why here it is not returning true
a && a["c"] => 'b' // How to return a boolean from a value here
!!( a && a["c"]) => true // is it correct way to return true or any other better way available?
<button title="Submit" *ngIf="!!(a && a["c"])">Submit</button>
"why here it is not returning true"
(a && a["c"]) returns a if a is falsy and a["c"] if a is truthy. An object is always truthy, therefore (a && a["c"]) returns "b".
"How to return a boolean from a value here"
!! is a common operation to convert a truthy value to true and a falsy value to false.
"is it correct way to return true or any other better way available?"
It is correct and I would use !!(a && a["c"]) to convert (a && a["c"]) to boolean.
You can make it shorter with !!a?.c (optional chaining):
<button title="Submit" *ngIf="!!a?.c">Submit</button>
or even
<button title="Submit" *ngIf="a?.c">Submit</button>
if your TypeScript configuration allows it.
I recommend to check the list of truthy and falsy values. Sometimes the results can be very surprising.