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 に答える