0

这是一个简单的小提琴

alert(document.doctype.valueOf())

[object DocumentType]正如预期的那样,它会产生。

但是,当我按 F12 并document.doctype.valueOf()在 JavaScript 控制台(Chrome、IE11)中输入时,我看到:

<!DOCTYPE html>

为什么会出现差异,以及它在控制台模式下实际显示什么属性(如果有)?

[更新]document.doctype.outerHTML当我在@BlueSkies 的答案的评论中提到它在 IE11 之前一直有效时,我不太正确。就我而言,我在 C# 应用程序中托管了一个 WinForms 版本的IEWebBrowser控件。我刚刚发现它在 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 回答