为什么我的浏览器在body标签内强制执行脚本标记?

Wax*_*Wax 0 html javascript dom

我正在尝试从一开始就学习JavaScript来理解它.

我在这里要做的是输出<body>标签中找到的每个元素的nodeTypes .我明白,由于<body>某种未知的原因,它的子元素之间存在不可见的文本,从而产生输出

3 1 3 1
Run Code Online (Sandbox Code Playgroud)

我把<script>标签外面<body>的标签,但它仍然在计数for循环,导致的最后一位数字13 1 3 1循环顺序.为什么?为什么<script>标签被<body>浏览器强制插入标签内?

<html>
    <body id = "bodyTest"> 
        <p>Some Text</p>
    </body>

    <script type="text/javascript">
        var c = document.body.childNodes;

        var txt = "";
        for(var k = 0; k < c.length; k++) {
            txt += c[k].nodeType + " ";
            console.log(txt);
            console.log(c[k].nodeName);
        }
        alert(txt);
    </script>
</html>
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码.

<html>
    <body id = "bodyTest"> 
        <p>Some Text</p>
    </body>

    <script type="text/javascript">
        // Code above
    </script>
</html>
Run Code Online (Sandbox Code Playgroud)

eli*_*ide 7

这不是有效的HTML.该<html>标签只能包含<head><body>标签,不是<script>.

参见规范:

允许的内容
一个头元素,后跟一个body元素

当您的浏览器遇到损坏的HTML时,它会尝试修复它.在这种情况下,这意味着将您的<script>标记视为在标记中<body>.