0

ここに簡単なフィドルがあります:

alert(document.doctype.valueOf())

予想通り、生成[object DocumentType]されます。

ただし、F12 をdocument.doctype.valueOf()押して JavaScript コンソール (Chrome、IE11) に入力すると、次のように表示されます。

<!DOCTYPE html>

不一致の理由と、コンソール モードで実際に表示されるプロパティ (存在する場合) は何ですか?

[更新]document.doctype.outerHTML @BlueSkies's answerへのコメントで IE11 までは機能していたと述べたとき、私はまったく正しくありませんでした。私の場合、IEWebBrowserコントロールの WinForms バージョンをC# アプリでホストしています。IE11でも、次のように機能することを発見しました:

dynamic domDocument = webBrowser.Document.DomDocument;

// this shows '<!DOCTYPE html PUBLIC "" "">'
string doctype = domDocument.doctype.outerHTML;
MessageBox.Show(doctype); 

// this shows 'undefined'
domDocument.parentWindow.execScript("alert(document.doctype.outerHTML)");

どうやら、それは外部からは機能しますが、ページの内部からは機能しません。興味深いが、信頼できない。document.doctype.outerHTMLこの IE ベースのアプリでも使うべきではないと思います。

4

1 に答える 1

3

はどちらの.valueOf()出力も返しません。返されるのは実際のノードです。

したがって、alert().toString()ノードの を提供し、Chrome/IE コンソールは単にノードを HTML にシリアル化することを決定しました。

document.doctype.valueOf() === document.doctype; // true

ここでちょっと実験…

document.doctype.toString = function() { return "foobar"; }

alert(document.doctype.valueOf());  // shows "foobar"
于 2013-11-09T01:15:37.280 に答える