2

我刚刚发现了一件让我非常困惑的事情:

  <!DOCTYPE html>
  <html lang="en">
    <head>
      <title></title>
    </head>
    <body>
      <script type="text/javascript">
        console.log(document.head);
      </script>
    </body>
  </html>

每次我在 Safari 和 Chrome 中刷新此页面时,控制台输出都会在 JavaScript“HTMLHeadElement”和 HTML 本身之间交替。

有人愿意详细说明吗?

4

1 回答 1

2

我在 Chrome 中尝试了这个实验并得到了相同的结果。我的猜测是 webkit 实现中的某种解析竞争条件。

当我修改代码以不立即运行代码时,我可以获得一致的结果。

<script type="text/javascript">
    setTimeout(function() { console.log(document.head) } , 0);
</script>

控制台将显示带有展开/折叠三角形的 HTML,因此可能作为一个对象。

<head>
    <title></title>
</head>

如果我添加.outerHTML,我也会在那里得到一致的结果,将 HTML 记录为字符串。

<script type="text/javascript">
    console.log(document.head.outerHTML);
</script>

最后,添加一个.toString()将始终记录[object HTMLHeadElement]

<script type="text/javascript">
    console.log(document.head.toString());
</script>
于 2013-04-21T03:00:07.190 回答