Say I check it against and expression, then aren\'t these two same ?
{{val}}
There is actually another difference between them when you try to manipulate elements within the structures that are wrapped within a section:
ngIf will cause an undefined error in your code if you try reference an element within that section when is false.
[hidden] will not cause an undefined error in your code if you try to reference an element within the section, when that section is hidden.
So [hidden] is better used when we want to operate on elements within the wrapped section.