PHP a presque la même chose en fait, et ça ne me gène pas, c'est le principe du typage dynamique et de l'égalité via la manipulation de type (=

.
C'est quelque chose de bien utile quand on sait comment l'utiliser. Pour exemple j'utilise beaucoup
empty($var) qui retourne true si la variable est non-initialisée, array vide, string vide (ce qui comprend aussi bien l'absence de caractères que la présence stricte de caractères d'espacement), false, 0, "0". L'important est de savoir ce qu'on veut récupérer.
En revanche, petite différence sur l'exemple JS, PHP a un false pour
[] == 0. Étant donné le reste et l'exemple de
empty($var), je trouve cela un brin illogique avec le reste.