Следующее показывает, что "0"
неверно в Javascript:
>>> "0" == false
true
>>> false == "0"
true
Итак, почему следующий отпечаток "ha"
?
>>> if ("0") console.log("ha")
ha
Это вызвано тем, что приведение типа использования JavaScript в булевых контекстах и Вашем коде
if ("0")
будет принуждено к истинному в булевых контекстах.
существуют другие значения truthy в JavaScript, который будет принужден к истинному в булевых контекстах, и таким образом выполняться если блок are:-
if (true)
if ({})
if ([])
if (42)
if ("0")
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)