valueOf () дает разные значения в скрипте и консоли F12 (только Chrome и IE11)

0

Вот простая скрипка:

alert(document.doctype.valueOf())

Он создает [object DocumentType], как и ожидалось.

Однако, когда я нажимаю F12 и просто набираю document.doctype.valueOf() в консоли JavaScript (Chrome, IE11), я вижу:

<!DOCTYPE html>

Почему это несоответствие, и какое свойство (если оно есть) действительно отображается в консольном режиме?

[UPDATE] Когда я упомянул, что document.doctype.outerHTML работал до тех пор, пока IE11 в комментариях к @BlueSkies не ответит, я был не совсем прав. В моем случае я размещаю WinForms версию IE WebBrowser в приложении С#. Я только что обнаружил, что это работает в 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.

  • 0
    Консоль показывает свойства name , publicId и systemId для document.doctype .
  • 0
    @Teemu, значит, консоль предоставляет особый режим объекту document.doctype ?
Показать ещё 1 комментарий
Теги:
dom
internet-explorer
google-chrome

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"
  • 0
    Хм ... можете ли вы сериализовать этот узел в HTML с JavaScript, так же, как это делает консоль , не прибегая к такой методике: stackoverflow.com/a/10162353 ? Это моя точка зрения на разницу.
  • 0
    @Noseratio: Нет, насколько мне известно, нет встроенного метода для этого. Консоль, вероятно, использует некоторый код, похожий на этот ответ. Я не верю .inner/outerHTML может дать вам разметку. Консоль является дополнением. Там нет спецификации, которая определяет его поведение.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню