Pas getElementById pour le corps?

Cette question m'a dérangé pendant une longue période. Désolé si c'est une question stupide.

Avant, je n'ai connu que vous pouvez obtenir les éléments avec un nom de classe

document.body.getElementsByClassName("foo");

Et j'ai été tellement paresseux, j'ai juste copié et collé le code à l'autre partie pour ce faire

document.body.getElementById("bar");

J'ai accidentellement trouvé, ça ne marchera pas. Je l'ai testé et il dit

TypeError: Object #<HTMLBodyElement> n'a pas de méthode getElementById'

Alors pourquoi a-t-elle getElementsByClassName etgetElementsByTagName et tous ceux des méthodes similaires, mais seulement aucune getElementById?

typeof document === typeof document.body   //true

Leurs types sont les mêmes, donc ils devraient avoir la même chose. Mais il ne semble pas être le cas ici.

  • typeof est "object" pour les deux qui signifie qu'ils peuvent être n'importe quel type d'objets. Il ne veut pas vous en dire beaucoup sur les méthodes qu'ils ont.
  • "Leurs types sont les mêmes, donc ils devraient avoir la même chose." Pas de. Ils sont tous les deux objets, mais pas tous les objets partagent les mêmes propriétés/méthodes.
  • Recommandation, ne jamais vérifier les types de javascript pour voir si des choses sont les mêmes, itérer sur les propriétés et de les vérifier. Parce que typeof document === typeof document.body === typeof null === typeof [] === "object"