Cuando el navegador carga una página, analiza tu HTML en un árbol de nodos llamado DOM (Document Object Model). Cada etiqueta se convierte en un nodo element, el texto entre etiquetas en nodos text y los comentarios en nodos comment. Luego JavaScript lee y cambia la página recorriendo y editando este árbol, no la cadena HTML original.
El HTML que escribes es solo una secuencia de caracteres. El navegador lo convierte en un árbol estructurado y, de paso, crea nodos que no escribiste a propósito: los saltos de línea y la sangría entre etiquetas se convierten en nodos de texto en blanco. Verlos explica por qué childNodes suele contener más de lo que esperas.
Preguntas y respuestas frecuentes sobre este tema.
children solo enumera nodos element; childNodes también incluye nodos text (incluido el espacio en blanco) y nodos comment. Por eso childNodes.length suele ser mayor. Esta herramienta muestra cada tipo de nodo para que la diferencia sea evidente.
Los saltos de línea y la sangría que añades para que el HTML sea legible se convierten en nodos text en el DOM. Son nodos reales que pueden afectar la maquetación y el recorrido del DOM. El HTML minificado tiene muchos menos.
No. El análisis se ejecuta por completo en tu navegador con el DOMParser integrado y nada de lo que pegas sale de tu dispositivo.