大多数javascript库包含类似于:
的行 var b = (a ? a.ownerDocument || a: 0).documentElement;
如果a
是null
,那么(0).documentElement
应该返回什么?
答案 0 :(得分:4)
最有可能:未定义 还有什么?
答案 1 :(得分:4)
来自jQuery
/ Sizzle
评论:
http://jsapi.info/jquery/1.7.2/jQuery.isXMLDoc
对于尚不存在的情况,会验证documentElement (例如在IE中加载iframe - #4833)
因此返回undefined
只是可爱的语法 - 这是在documentElement
上调用0
的结果。
下一行有检查:
return documentElement ? documentElement.nodeName !== "HTML" : false;
所以无论如何它都会返回false。
答案 2 :(得分:2)
这是一个简写:
var b; // defaults to "undefined"
if (a) b = a.ownerDocument.documentElement || a.documentElement;
正在检查是否已在DOM树中创建了DOM documentElement。 (0).documentElement访问一个不存在的属性,默认为undefined。如果未定义“documentElement”,则尚未创建它。
这可能更容易可视化:
a.ownerDocument.documentElement || // try this first
a.documentElement || // fallback
undefined; //documentElement has not been created yet
这不仅仅是“可爱的语法”,而是建议的另一个答案。它是“手动缩小”,因为在像JavaScript这样的动态类型语言中,缩小器无法确定“a”和“a.ownerDocument”可能属于同一类型,因此只能执行空白删除。
通过Closure Compiler运行我的上述代码产生:
var b;a&&(b=a.documentElement||a.ownerDocument.documentElement);
与此同时,您在问题中提出的“手动缩小”版本通过缩小器生成:
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
答案 3 :(得分:0)
ownerDocument
属性返回html节点的文档所有者,作为文档对象。
html文档本身是元素的ownerDocument。如果它为null,我猜(0).documentElement在页面包含多个文档时返回初始文档。
ownerdocument可用于相应页面中的多个文档内创建html元素