Twig default filter or Null coalescing operator? When testing for a variable in a template these two appear to do the same thing. I've read CruftlessCraft's article on How to check for undefined variables but can't see an explanation of why I should use one over the other. In his examples (below) I note that only the default filter includes "" in the list of results, is that correct or significant?
Is one faster or more efficient?

{% if twigVariable|default %}
    Value is set and not empty
{% else %}
    Value is either undefined, false, 0, null, "", [] or {}
{% endif %}


or

{% if twigVariable ?? false %}
    The value is set and not empty
{% else %}
    Value is either undefined, false, 0, null, [] or {}
{% endif %}


Does it make any difference if I don't need a fallback or the else and am just wrapping it around a div that shouldn't be shown if the variable doesn't have any usable content?
So things like the null coalescing operator make it easier to chain things, so if you have a number things to fall back on, it's much neater to write:

{% set woof = bark ?? howl ?? growl ?? null %}


...then it is to try to chain that all together with | default filters.

Something that may also make your life easier is the Empty Coalesce plugin, so you can write:

{% set woof = bark ??? howl ??? growl ??? null %}


What's the difference? The null coalescing operator only checks for null, so if bark = "" then it'll choose that, which often isn't what you want for strings.

There's a writeup of all of this in Handling Errors Gracefully in Craft CMS article.

Now, what is going to be more performant? Unless you're in a massive inner loop (which we should avoid in a templating language anyway), I doubt it'll matter. PHP code is transpiled to a bytecode that often gets cached, it should be fine.

But in theory, ?? and ??? are probably marginally faster.