console.log(document.head)结果与每次刷新交替

时间:2012-10-04 22:01:32

标签: javascript html google-chrome safari webkit

我刚刚发现了一些令我困惑的事情:

  <!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本身之间交替显示。

有人愿意详细说明吗?

1 个答案:

答案 0 :(得分: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>