valueOf()在脚本和F12控制台中给出不同的值(仅限Chrome和IE11)

时间:2013-11-09 01:11:41

标签: javascript html internet-explorer google-chrome dom

这是simple fiddle

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

1 个答案:

答案 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"