Что получает документElement of 0 return

большинство javascript-библиотек содержат строки, похожие на:

    var b = (a ? a.ownerDocument || a: 0).documentElement;

если a - null, то, что должно возвращаться (0).documentElement?

Ответ 1

Из jQuery/Sizzle комментариев:

http://jsapi.info/jquery/1.7.2/jQuery.isXMLDoc

documentElement проверяется для случаев, когда он еще не существует (например, загрузка iframes в IE - # 4833)

Так что это просто симпатичный синтаксис для возврата undefined - это результат вызова documentElement на 0.

В следующей строке есть проверка:

return documentElement ? documentElement.nodeName !== "HTML" : false;

Таким образом, он все равно возвращает false.

Ответ 2

скорее всего: undefined что еще?

Ответ 3

Это сокращение для:

var b; // defaults to "undefined"
if (a) b = a.ownerDocument.documentElement || a.documentElement;

Он проверяет, был ли еще создан документ DOM документа в дереве DOM. (0).documentElement обращается к несуществующему свойству, которое по умолчанию имеет значение undefined. Если "documentElement" undefined, он еще не создан.

Это может быть проще визуализировать:

a.ownerDocument.documentElement || // try this first
a.documentElement || // fallback
undefined; //documentElement has not been created yet

Это не просто "симпатичный синтаксис", как предлагается другой ответ. Это "ручная минимизация", потому что на динамически типизированном языке, таком как JavaScript, minifier не может определить, что "a" и "a.ownerDocument" могут иметь один и тот же тип и, следовательно, сделать немного больше, чем удаление пробелов.

Запуск моего кода выше с помощью компилятора Closure дает:

var b;a&&(b=a.documentElement||a.ownerDocument.documentElement);

Между тем, "ручная мини-версия", которую вы представили в своем вопросе, запускаемой через minifier, производит:

var b=(a?a.ownerDocument||a:0).documentElement;

Результаты:

Without manual minification (my code) + Closure minifier: 64 characters
With manual minification (your original code): 54 characters
With manual minification (your original code) + Closure minifier: 47 characters

Ответ 4

Свойство ownerDocument возвращает владельца документа html node в качестве объекта документа. сам html-документ является ownerDocument элемента. если он равен нулю, я думаю (0).documentElement возвращает исходный документ, когда страница содержит несколько документов. ownerdocument можно использовать для создания html-алиментов внутри нескольких документов на одной странице соответственно.