大多数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 (例如在IE中加载iframe - #4833)
所以这只是回归的可爱语法 undefined
- 这是打电话的结果 documentElement
上 0
。
在下一行有检查:
return documentElement ? documentElement.nodeName !== "HTML" : false;
所以它无论如何都会返回false。
最有可能的:未定义 还有什么?
这是一个简写:
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
该 ownerDocument
property返回html节点的document的所有者,作为文档对象。
html文档本身是元素的ownerDocument。如果它为null,我猜(0).documentElement在页面包含多个文档时返回初始文档。
ownerdocument可用于相应地在同一页面中的多个文档内创建html元素
从 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。
最有可能的:未定义 还有什么?
这是一个简写:
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
该 ownerDocument
property返回html节点的document的所有者,作为文档对象。
html文档本身是元素的ownerDocument。如果它为null,我猜(0).documentElement在页面包含多个文档时返回初始文档。
ownerdocument可用于相应地在同一页面中的多个文档内创建html元素