alert(document.doctype.valueOf())
按预期生成[object DocumentType]
。
然而,当我点击F12并在JavaScript控制台(Chrome,IE11)中输入document.doctype.valueOf()
时,我看到了:
<!DOCTYPE html>
为什么在控制台模式下实际显示的差异和属性(如果有的话)是什么?
[更新] 当我在@ BlueSkies answer的评论中提到document.doctype.outerHTML
曾经工作到IE11时,我不太正确。就我而言,我在C#应用程序中托管了IE WebBrowser
control的WinForms版本。我刚刚在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)");
显然,它适用于外部,但不适用于页面内部。有趣但不可靠。我想即使在这个基于IE的应用程序中我也不应该使用document.doctype.outerHTML
。
答案 0 :(得分: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"