большинство javascript-библиотек содержат строки, похожие на:
var b = (a ? a.ownerDocument || a: 0).documentElement;
если a
- null
, то, что должно возвращаться (0).documentElement
?
большинство javascript-библиотек содержат строки, похожие на:
var b = (a ? a.ownerDocument || a: 0).documentElement;
если a
- null
, то, что должно возвращаться (0).documentElement
?
Из 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.
скорее всего: undefined что еще?
Это сокращение для:
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
Свойство ownerDocument
возвращает владельца документа html node в качестве объекта документа.
сам html-документ является ownerDocument элемента. если он равен нулю, я думаю (0).documentElement возвращает исходный документ, когда страница содержит несколько документов.
ownerdocument можно использовать для создания html-алиментов внутри нескольких документов на одной странице соответственно.